【发布时间】:2014-06-05 21:35:31
【问题描述】:
我有这个代码:
const int a = 2;
const int arr[] = {
1,a,3,4
};
但它给了我这个错误:
source.c:6:3: 错误:初始化元素不是常量
如何将常量添加到数组中?
【问题讨论】:
我有这个代码:
const int a = 2;
const int arr[] = {
1,a,3,4
};
但它给了我这个错误:
source.c:6:3: 错误:初始化元素不是常量
如何将常量添加到数组中?
【问题讨论】:
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 };
int 类型的常量。