我有一个指向 char 的二维指针数组,并在头文件中对其进行了初始化。
问题是这样的:它不会提示分配了一个 const char[]
但不喜欢我分配 const char*
(如代码所示)。它给我一个错误“初始化器元素不是常量”。
const char lang[8] = "English";
const char * langPtr = "English 1";
const char * optionPtr[3][10] = {
{lang, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{langPtr, 0, ...},
{...}
};
我认为 lang
和 langPtr
都指向字符串的开头,所以应该能够做到这一点。我想用一个指针来初始化二维数组。无论如何,在全局范围内都可以这样做吗?
最佳答案
在 C 中,静态对象的初始化器中的元素必须是“常量表达式”(所有全局对象都是静态的)。
静态对象的地址是一个“地址常量”,这是一种“常量表达式”——这就是 lang
起作用的原因。变量的值 - 即使是 const
变量(尽管注意 langPtr
本身不是 const
) - 不是 一个“常量表达式”,这就是 langPtr
不起作用的原因。
请注意,这在 C++ 中有所不同,其中 const
限定的变量是真正的常量。
关于c - 全局初始化 2D 数组指针到 char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3571728/