9

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

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

以及使用哪一个来防止:

myPointer = somethingElse;
4

4 回答 4

10

从右到左阅读规则:

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*没有意义
于 2013-03-01T11:58:35.417 回答
1

在某些地方,您可以将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尾随,因为这是唯一可以始终遵守的“规则”。

于 2013-03-01T11:58:05.080 回答
0
  • myPointer1是指向 的const指针void
  • mypointer2并且myPointer3都是指向const void.

myPointer2和声明之间的区别myPointer3只是风格问题。

注意:const void这里的意思是指出的数据是const。例如,与voidfrom无关。int main(void)

于 2013-03-01T11:54:13.467 回答
0
  1. void * const myPointer1;= 将 myPointer1 声明为指向 void 的 const 指针
  2. void const *myPointer2;= 将 myPointer3 声明为指向 void const的指针
  3. const void *myPointer3;= 将 myPointer3 声明为指向 const void的指针

每当有这样的疑问时,您可以使用:: cdecl.org

您应该尝试myPointer1以避免您解释的情况,因为它是const pointer.

于 2013-03-01T12:01:51.493 回答