【问题标题】:Constant array of constant objects常量对象的常量数组
【发布时间】:2011-10-03 10:28:02
【问题描述】:

如何在 C(不是 C++)中定义常量对象的常量数组?

我可以定义

int const Array [] = {
    /* init data here */
};

但这是一个非常量的常量对象数组。

我可以使用

int const * const Array = {
    /* init data here */
};

它可能会起作用。 但是可以用数组语法做到这一点吗? (看起来更干净)

【问题讨论】:

  • 我认为您将此与指针混淆了。指针可以是常量,也可以指向常量数据,或两者兼而有之。还要注意int constconst int 是完全等价的表达式,为了混淆程序员,标准允许两者。一定要爱C。

标签: c arrays constants


【解决方案1】:

一个数组不能是“常数”——这到底是什么意思?无论如何,数组大小已经是编译时常量,如果所有成员都是常量,那你还想要什么?您试图排除 const int[] 可能发生的哪种突变?

【讨论】:

  • 我认为说数组不能是常数是令人困惑的。说一个数组总是不变的更有用。对于新手来说,数组的行为似乎很像指针,但与指针不同的是,在赋值的左侧放置一个是非法的。
  • 这实际上不是一个答案。您的问题的答案可以在stackoverflow.com/a/31413155/544557找到
【解决方案2】:

“双常量”仅适用于指针,因为它们可以更改为指向其他对象1,因为数组的特性本身是静态的(数组的大小/类型不能更改/指向别的东西)你可以应用的唯一const是他们的元素。


  1. 所以你有变体“指向int的指针”、“指向常量int”、“指向int的常量指针”、“指向常量int的常量指针”。李>

【讨论】:

    【解决方案3】:

    如果你想让数组的元素不被修改,就用这个:

    const int Array[];

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-03
      • 1970-01-01
      • 1970-01-01
      • 2019-02-05
      • 1970-01-01
      • 2013-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多