这是我拥有的另一个question的延续。
请考虑以下代码:
char *hi = "hello";
char *array1[3] =
{
hi,
"world",
"there."
};
它没有编译到我的意外(显然我不知道C语法和我想的)并生成以下错误:
error: initializer element is not constant
如果我将char *更改为char [],则编译正常:
char hi[] = "hello";
char *array1[3] =
{
hi,
"world",
"there."
};
有人可以向我解释原因吗?
答案 0 :(得分:6)
在第一个示例(char *hi = "hello";
)中,您正在创建一个非常量指针,该指针初始化为指向静态常量字符串“hello”。从理论上讲,这个指针可以指向你喜欢的任何东西。
在第二个示例(char hi[] = "hello";
)中,您专门定义了一个数组,而不是一个指针,因此它引用的地址是不可修改的。请注意,可以将数组视为指向特定内存块的不可修改指针。
你的第一个例子实际上是在C ++(我的编译器,至少)编译时没有问题。