故障声明串的全局阵列在C
下面的代码,在全球范围内,不编译:故障声明串的全局阵列在C
const char *one = "1";
const char *two = "2";
char *nums[2] = {one, two};
错误消息是“初始元件不恒定” - 这我惊讶,因为变量一个和两个都被声明为常量。制作编号const
不能解决问题。用字符串文字声明数字(char *nums[2] = {"1", "2"};
)确实解决了这个问题,但出于可读性的原因,我宁愿不以这种方式在我的实际代码中这样做。
有没有一个体面的方式来得到这个工作?
C不允许从变量进行全局初始化,即使这些变量本身为const
。与C++相比,C具有更严格的“常量表达式”概念。
目前,one
是可变指针,所以它不可能被认为是一个常量表达式,但即使是更正确const char * const one = "1";
中C.不会做(这将会在C++细。)
你不得不说:
const char * nums[2] = { "1", "2" };
请注意,C中的'const'并不真正意味着“常量”;它表示只读。如果你为一个数组提供一个初始值设定项,你不需要指定长度:'const char * nums [] = {“1”,“2”};' –
@KeithThompson:Thanks,“read-only”想一想'const'的好方法! –
如果你想要单独的命名字符串和数组,你可以写'char const * const one = nums [0];' –
你可以尝试#define
荷兰国际集团的常数代替
#define ONE "1"
#define TWO "2"
/* const */ char *nums[2] = {ONE, TWO};
const char *one = "1";
const char *two = "2";
这里无论是指定const限定符,one和two都是字符串const。 我的意思是char *one = "1"
;与常规char *one = "1"
相同。 在C字符串中const
通过在声明中定义来初始化,并且它们在程序的执行过程中保持不变。
char *nums[2];
是一个可以以两种方式使用的char指针数组。
第一种方式:
const char *one = "1";
const char *two = "2";
char *num[2] = {"1","2"}; // this is same as creating array of string const
第二种方式:
const char *one = "1";
const char *two = "2";
main()
{
int len1 = strlen(one)+1;
int len2 = strlen(two)+1;
nums[0] = (char *)malloc(len1);
nums[1] = (char *)malloc(len2);
strcpy(nums[0],one);
strcpy(nums[1],two);
}
'constant'并不意味着'const',这意味着文字,像' “喇嘛喇嘛”' – Shahbaz