0

我知道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?当类型不允许被限定时,这怎么可能?

4

2 回答 2

2
float *const p1; // 1

意味着指针p1是常量,它不能(而不应该)指向另一个地址。
不是指针类型是常量,而是该类型的实例是常量p1

使用顺时针螺旋规则可以更好地理解这一点。

当类型不允许被限定时,这怎么可能?

这是不正确的。实际上,限定符是类型限定符的缩写形式(第 6.7.3 节)

于 2012-11-29T03:20:39.510 回答
1

有了这个声明:

const int a[5];

a 具有类型“5 个 const int 的数组”。

有了这个声明

float *const p1;

p1 的类型为“指向浮点的常量指针”。

有了这个声明

const float *p2;

p2 具有“指向 const float 的指针”类型。

无法将数组声明为 const,但无论如何也无法更改数组。只能更改数组中的元素。

于 2012-11-29T03:28:07.760 回答