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。例如,与voidfrom无关。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.