Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 常量可以应用于类型吗?_C_Constants_C99 - Fatal编程技术网

C 常量可以应用于类型吗?

C 常量可以应用于类型吗?,c,constants,c99,C,Constants,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?当类型不允许被限定时,这怎么可能呢 float *const p1; // 1 表示指针p1是常量,不能

我知道
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)

表示指针
p1
是常量,不能(不应该)指向另一个地址。
不是指针类型是常量,而是该类型的实例(即
p1
)是常量

使用更好地理解这一点

当不允许对类型进行限定时,这怎么可能呢?

这是不对的。事实上,限定符是类型限定符(§6.7.3)

的缩写形式,声明如下:

const int a[5];
类型为“5常量整数数组”

我谨此声明

float *const p1;
const float *p2;
p1具有“指向浮点的常量指针”类型

我谨此声明

float *const p1;
const float *p2;
p2具有类型“指向常量浮点的指针”

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

使用此声明:

const int a[5];
类型为“5常量整数数组”

我谨此声明

float *const p1;
const float *p2;
p1具有“指向浮点的常量指针”类型

我谨此声明

float *const p1;
const float *p2;
p2具有类型“指向常量浮点的指针”


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

“我知道
const
限定符只影响对象,而不影响其类型”-这是错误的。@melpomene:例如?说常量只影响数组对象而不影响其类型是不对的吗?这确实是不对的。您还选择了一个糟糕的示例。数组不能分配给,所以它实际上是隐式常量。如果没有可修改的内容,则是否为常量并不重要。“我知道
const
限定符只影响对象,而不影响其类型”-这是错误的。@melpomene:例如?说常量只影响数组对象而不影响其类型是不对的吗?这确实是不对的。您还选择了一个糟糕的示例。数组不能分配给,所以它实际上是隐式常量。如果没有需要修改的内容,那么它是否为const并不重要,因为指针是派生类型。这句话在这里有意义吗?“(§6.2.5/26)派生类型不受派生类型的限定符(如有)的限定。”因为指针是派生类型。这句话在这里有意义吗?“(§6.2.5/26)派生类型不由派生类型的限定符(如有)限定。”