常量对象的常量数组

5
如何在C语言中定义常量对象的常量数组(非C++)?
我可以这样定义:
int const Array [] = {
    /* init data here */
};

但这是一个非常量对象的非常量数组。
我可以使用
int const * const Array = {
    /* init data here */
};

而且这可能会起作用。但是使用数组语法是否可行呢?(看起来更简洁)

1
我认为你把指针和常量搞混了。指针可以是常量,也可以指向常量数据,或者两者都有。另外请注意,int constconst int 是完全等效的表达式,标准允许两种写法,这让程序员感到困惑。C语言真是让人爱不释手。 - Lundin
3个回答

11

一个数组不能是“常量”——这甚至意味着什么?在任何情况下,数组大小已经是编译时常量,如果所有成员都是常量,那你还想要什么?你试图排除哪种可能对于 const int[] 是可能发生的变异?


7
我认为说一个数组不能是常量会令人感到困惑。更有用的说法是,一个数组始终是常量。对于新手来说,数组看起来很像指针,但不同的是,将一个数组放在赋值语句的左侧是非法的。 - Josh
2
这实际上不是一个答案。你的问题的答案可以在https://dev59.com/M43da4cB1Zd3GeqPtwLO#31413155找到。 - Jim Balter

8
“双重常量性”只适用于指针,因为它们可以更改为指向其他内容1。由于数组的特征本身是静态的(数组的大小/类型/指向无法更改),因此您可以应用的唯一const是它们的元素。
  1. 因此,您有“指向int的指针”、“指向常量int的指针”、“指向int的常量指针”和“指向常量int的常量指针”这些变化。

2
如果您希望数组的元素不被修改,可以使用以下代码:const int Array[];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接