【问题标题】:Add constant to array将常量添加到数组
【发布时间】:2014-06-05 21:35:31
【问题描述】:

我有这个代码:

const int a = 2;

const int arr[] = {
  1,a,3,4
};

但它给了我这个错误:

source.c:6:3: 错误:初始化元素不是常量

如何将常量添加到数组中?

【问题讨论】:

    标签: c arrays constants


    【解决方案1】:

    const int 不被视为常量。

    您必须使用实际数字或定义它。

    #define FOUR 4
    
    const int arr[] = {
       1,FOUR,3,4 
    };
    

    使用复合文字,可以用变量来初始化它:

    const int value = 2 ;
    
    const int *array[] = { &(int){1} , &value , &(int){3} , &(int){4} } ;
    
    int main(void){
    
        printf("%d" , *array[1] ) ;
    
      return 0;
    }
    

    用于初始化数组的未命名对象((int){1})具有文件范围和静态存储持续时间。

    【讨论】:

    • const int 被认为是“常量变量”,而数字被认为是“常量数字”或只是常量。但对于 gcc,它适用于常量变量/typedef。一些旧的编译器也不会编译你的复合文字示例。
    • 你也可以使用枚举。 enum { FOUR = 4 };
    • @user139873 是的,它应该使用更少的内存。
    • @Edenia c Standard 不允许这样做; 6.7.9:具有静态或线程存储持续时间的对象的初始化程序中的所有表达式都应为常量表达式或字符串文字。什么是常量,6.4.4:常量 i> 关于pre c99 编译器;如果 OP 需要一个符合 15 年标准的示例,他会指定它(标签)。我认为接受的答案不言自明。否决票真的有道理吗?
    • @user139873:枚举 hack 很棒——但仅限于 int 类型的常量。
    猜你喜欢
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    • 2013-04-13
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 2018-10-12
    相关资源
    最近更新 更多