我知道const
限定符只影响一个对象,但不影响它的类型:
例如:
// Only the elements of an array are constant not the array itself
const int a[5];
假设我有:
float *const p1; // 1
float const *p2; // 2
在上面的第一种情况下,这是否意味着指针类型是常量而不是对象p1
?当类型不允许被限定时,这怎么可能?
float *const p1; // 1
意味着指针p1
是常量,它不能(而不应该)指向另一个地址。
不是指针类型是常量,而是该类型的实例是常量p1
。
使用顺时针螺旋规则可以更好地理解这一点。
当类型不允许被限定时,这怎么可能?
这是不正确的。实际上,限定符是类型限定符的缩写形式(第 6.7.3 节)
有了这个声明:
const int a[5];
a 具有类型“5 个 const int 的数组”。
有了这个声明
float *const p1;
p1 的类型为“指向浮点的常量指针”。
有了这个声明
const float *p2;
p2 具有“指向 const float 的指针”类型。
无法将数组声明为 const,但无论如何也无法更改数组。只能更改数组中的元素。