C中的以下三个指针声明之间有什么区别:
void * const myPointer1;
void const *myPointer2;
const void *myPointer3;
用于防止:
myPointer = somethingElse;
答案 0 :(得分:8)
从右到左阅读规则:
void * const myPointer1;
myPointer1是指向const
的{{1}}指针。
void
myPointer2是指向void const *myPointer2;
const
的指针。
void
myPointer3是指向const void *myPointer3;
void
的指针。
结论:
const
正是您要找的 - 它是myPointer1
指针,因此无法修改其值const
和myPointer2
是一回事myPointer3
和myPointer2
有点毫无意义 - 取消引用myPointer3
没有意义答案 1 :(得分:1)
在某些地方,您可以将const
放在声明为const
的任何地方前面:
const int * x; // pointer to constant int
const
因此,我的个人推荐总是有int const * x; // pointer to constant int
int * const x; // constant pointer to int
int const * const x; // constant pointer to constant int
个尾随,因为这是唯一可以始终遵守的“规则”。
答案 2 :(得分:0)
myPointer1
是指向const
的{{1}}指针。 void
和mypointer2
都是myPointer3
。 const void
和myPointer2
声明之间的区别只是风格问题。
注意:myPointer3
表示指向的数据为const void
。与const
中的void
无关。
答案 3 :(得分:0)
void * const myPointer1;
=将myPointer1声明为 const指向void的指针 void const *myPointer2;
=将myPointer3声明为指向void const的指针 const void *myPointer3;
=将myPointer3声明为指向const void的指针 每当有这样的疑虑时,你可以使用:: cdecl.org
您应该尝试 myPointer1 以避免您解释的条件,因为它是const pointer
。