10

这是我的另一个问题的延续。

考虑以下代码:

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."
};

有人可以向我解释为什么吗?

4

1 回答 1

6

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

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

您的第一个示例实际上在 C++ 中编译没有问题(至少是我的编译器)。

于 2011-10-20T10:37:28.440 回答