【问题标题】:Const array with variables from another const array带有来自另一个 const 数组的变量的 const 数组
【发布时间】:2015-01-11 13:20:39
【问题描述】:

我有一个像这样的常量数组:

const int foo[NUM] = {
    9000,
    4400,
    620,
    480,
    1620
};

如何创建另一个 const 数组来对 foo 中的变量进行一些数学运算?我试过这个:

const int bar[NUM] = {
    foo[0] / (DEFINE1* DEFINE2),
    foo[1] / (DEFINE1* DEFINE2),
    foo[2] / (DEFINE1* DEFINE2),
    foo[3] / (DEFINE1* DEFINE2),
    foo[4] / (DEFINE1* DEFINE2)
};

但是这不起作用,它会返回错误:

错误 2('bar[0]' 接近初始化),适用于所有元素

错误 1 ​​初始化元素不是常量,适用于所有元素

【问题讨论】:

    标签: c arrays constants


    【解决方案1】:

    C consts 不是实常数,如C FAQ 中所述。因此,编译器仅强制您不能写入它们。对于所有其他用途,它们不是常量(您定义的方式)。


    旁注:这是 C 和 C++ 不同的领域之一。在 C++ 中,const 具有明显不同的含义,更接近您正在尝试的内容。

    【讨论】:

    • 但是即使我不使用 const,只使用 int 我也会遇到同样的错误......我该如何解决这个问题?
    • 删除 const 不是解决方案。我的回答是指出它不起作用的原因。您可以在任何地方使用定义。
    • 我真的不能,有些函数依赖于数组。
    【解决方案2】:

    cnicutar 给出the answer to your question

    仍然遵循DRY-principles 的可能解决方法是:

    #define FOO_0 (9000)
    #define F00_1 (4400)
    ...
    
    const int foo[NUM] = {
      FOO_0,
      FOO_1,
      ...
    };
    
    const int bar[NUM] = {
      FOO_0 / (DEFINE1* DEFINE2),
      FOO_1 / (DEFINE1* DEFINE2),
      ...
    };
    

    【讨论】:

    • 我可以使用它,但问题是我有另一个使用来自 bar 的变量的数组...还有其他方法吗?没有必要使用 const int。
    猜你喜欢
    • 2013-10-21
    • 2017-03-28
    • 1970-01-01
    • 2017-01-12
    • 2014-08-08
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    相关资源
    最近更新 更多