我知道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
?如果不允许这些类型合格,这怎么可能?
答案 0 :(得分:2)
float *const p1; // 1
表示指针p1
是常量,不能(而不应该)指向另一个地址
指针 type 不是常量,而是p1
这种类型的实例。
使用 Clockwise spiral rule 更好地理解这一点。
如果不允许这些类型合格,怎么办?
这不正确。实际上,限定符是类型限定符的简短形式(§6.7.3)
答案 1 :(得分:1)
有了这个声明:
const int a[5];
a类型为“5 const int的数组”。
使用此声明
float *const p1;
p1的类型为“const指针浮动”。
使用此声明
const float *p2;
p2的类型为“指向const float的指针”。
无法将数组声明为const,但无论如何都无法更改数组。只能更改数组中的元素。