C99:"int const*ptr"是什么意思?

use*_*918 2 c pointers constants c99

我正在查看C99规范(N1256.pdf),其中说(第11506页):

const int *ptr_to_constant;
int *const constant_ptr;
Run Code Online (Sandbox Code Playgroud)

"ptr_to_constant指向的任何对象的内容不应该通过该指针修改,但是ptr_to_constant本身可以更改为指向另一个对象.同样,constant_ptr指向的int的内容可能会被修改,但是constant_ptr本身应该总是指向同一地点." (6.7.5.1指针声明符)

从我之前读到的内容来看,以下两个陈述产生了相同的行为.

int *const constant_ptr; /* This form is mentioned in the standard */
int const *constant_ptr; /* This form is NOT mentioned in the standard */
Run Code Online (Sandbox Code Playgroud)

我想知道第二种形式是正确的还是只是一种延伸.

在此先感谢,-S

nou*_*ney 5

实际上int const *constant_ptr;是一样的const int *ptr_to_constant;.该const关键字影响左边的元素,如果不是,它会在合适的影响因素.

int const *constant_ptr;,这里左边的元素constint.

const int *ptr_to_constant;,这里const左边没有元素,所以它适用于te right,即int.


const int *ptr_to_constant; 
Run Code Online (Sandbox Code Playgroud)

这里,只有指针指向的值是常量.

int *const constant_ptr;
Run Code Online (Sandbox Code Playgroud)

这里,指针是常量.

int const *constant_ptr;
Run Code Online (Sandbox Code Playgroud)

这里,只有指针指向的值是常量.

int const * const constant_ptr_to_constant;
Run Code Online (Sandbox Code Playgroud)

这里,指针和它指向的值是常量.

编辑:

int const *constant_ptr;,你调用指针constant_ptr,但如果我保留你的名字方案,它应该被调用ptr_to_constant.

  • 符号`int const*ptr`和`int*const ptr`都是完全标准化的行为(但彼此不同).你在问题中引用的是一个例子(技术上,这是非规范性的,因此,但对于这个问题并不重要),见6.7.6.1 2011标准(ISO/IEC 9899:2011)的指针声明者.第6.7.6节声明符中的语法清楚地显示了'`*`type-qualifier-list-opt`D`',其中`D`是一个声明符,'type-qualifier-list-opt'允许`const`和其他限定符. (2认同)