【发布时间】:2012-08-13 13:36:12
【问题描述】:
有人可以解释以下行吗:
const void *const *ptr;
类型和 Ptr 变量是否都是常量?
【问题讨论】:
-
您可能会发现spiral rule 很有帮助。
标签: c
有人可以解释以下行吗:
const void *const *ptr;
类型和 Ptr 变量是否都是常量?
【问题讨论】:
标签: c
之后
const void *const *ptr;
您可以更改ptr,但不能更改*ptr 或**ptr
ptr = <SOMETHING_ELSE>; /* ok */
*ptr = <SOMETHING_ELSE>; /* error */
**ptr = <SOMETHING_ELSE>; /* error, ignoring the point that you cannot even have an object of type void */
【讨论】:
const 与否,无论如何,取消引用指针都会出错(**ptr),因为它是指向不完整类型的指针。 ;-)
我的想法是:
void * const var; // The pointer is constant and var can change
const void * var; // The pointer can change but not var
所以我认为你的语法
const void * const *ptr;
表示 ptr 是指向指针的指针。所以 ptr 将指向一个地址并且该地址不能改变(第一个常量)。 ptr 所在的地址也不能改变(第二个常量)。但我并不完全确定这一点。
【讨论】: