【问题标题】:string array initialisation字符串数组初始化
【发布时间】:2011-12-11 16:31:27
【问题描述】:

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

谁能解释一下为什么?

【问题讨论】:

    标签: c string pointers ansi-c


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢。有没有办法使用 const 关键字使第一段代码工作?
    • @lang2 不在那个范围内。请参阅此C FAQ。甚至没有char *const hi(指向char的常量指针)。
    • 刚刚添加了一些东西,虽然我不确定它是否会工作......你的第一个版本在 C++ 中编译正常 - 有时间我会尝试使用 C 编译器 :)
    • @icabod 不会的。阅读我发布的链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 2015-07-25
    • 2014-08-23
    • 2011-01-05
    • 1970-01-01
    • 2021-05-10
    相关资源
    最近更新 更多