C中以下三个指针声明有什么区别:
void * const myPointer1;
void const *myPointer2;
const void *myPointer3;
以及使用哪一个来防止:
myPointer = somethingElse;
C中以下三个指针声明有什么区别:
void * const myPointer1;
void const *myPointer2;
const void *myPointer3;
以及使用哪一个来防止:
myPointer = somethingElse;
从右到左阅读规则:
void * const myPointer1;
myPointer1 是const
指向void
.
void const *myPointer2;
myPointer2 是指向 a 的指针const
void
。
const void *myPointer3;
myPointer3 是指向 a 的指针void
const
。
结论:
myPointer1
就是你要找的——它是一个const
指针,所以它的值不能被修改myPointer2
并且myPointer3
是同一件事myPointer2
并且myPointer3
有点毫无意义——取消引用 avoid*
没有意义在某些地方,您可以将const
声明放在前面const
:
const int * x; // pointer to constant int
您总是可以在声明为 const 的任何内容const
之后放置:
int const * x; // pointer to constant int
int * const x; // constant pointer to int
int const * const x; // constant pointer to constant int
因此,我个人的建议总是有const
尾随,因为这是唯一可以始终遵守的“规则”。
myPointer1
是指向 的const
指针void
。 mypointer2
并且myPointer3
都是指向const void
.myPointer2
和声明之间的区别myPointer3
只是风格问题。
注意:const void
这里的意思是指出的数据是const
。例如,与void
from无关。int main(void)
void * const myPointer1;
= 将 myPointer1 声明为指向 void 的 const 指针void const *myPointer2;
= 将 myPointer3 声明为指向 void const的指针const void *myPointer3;
= 将 myPointer3 声明为指向 const void的指针每当有这样的疑问时,您可以使用:: cdecl.org
您应该尝试myPointer1以避免您解释的情况,因为它是const pointer
.