const可以应用于类型吗?

时间:2012-11-29 03:19:09

标签: c const c99

我知道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?如果不允许这些类型合格,这怎么可能?

2 个答案:

答案 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,但无论如何都无法更改数组。只能更改数组中的元素。