字符串数组初始化

时间:2011-10-20 10:33:16

标签: c string pointers ansi-c

这是我拥有的另一个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."
};

有人可以向我解释原因吗?

1 个答案:

答案 0 :(得分:6)

在第一个示例(char *hi = "hello";)中,您正在创建一个非常量指针,该指针初始化为指向静态常量字符串“hello”。从理论上讲,这个指针可以指向你喜欢的任何东西。

在第二个示例(char hi[] = "hello";)中,您专门定义了一个数组,而不是一个指针,因此它引用的地址是不可修改的。请注意,可以将数组视为指向特定内存块的不可修改指针。

你的第一个例子实际上是在C ++(我的编译器,至少)编译时没有问题。