const关键字的位置

时间:2013-03-01 11:52:36

标签: c

C中的以下三个指针声明之间有什么区别:

void * const myPointer1;
void const *myPointer2;
const void *myPointer3;

用于防止:

myPointer = somethingElse;

4 个答案:

答案 0 :(得分:8)

从右到左阅读规则:

void * const myPointer1;

myPointer1是指向const的{​​{1}}指针。

void

myPointer2是指向void const *myPointer2; const的指针。

void

myPointer3是指向const void *myPointer3; void的指针。

结论:

  • const正是您要找的 - 它是myPointer1指针,因此无法修改其值
  • constmyPointer2是一回事
  • myPointer3myPointer2有点毫无意义 - 取消引用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}}指针。
  • voidmypointer2都是myPointer3
  • 的指针

const voidmyPointer2声明之间的区别只是风格问题。

注意:myPointer3表示指向的数据为const void。与const中的void无关。

答案 3 :(得分:0)

  1. void * const myPointer1; =将myPointer1声明为 const指向void的指针
  2. void const *myPointer2; =将myPointer3声明为指向void const的指针
  3. const void *myPointer3; =将myPointer3声明为指向const void的指针
  4. 每当有这样的疑虑时,你可以使用:: cdecl.org

    您应该尝试 myPointer1 以避免您解释的条件,因为它是const pointer