这是另一个的延续question https://stackoverflow.com/questions/7834294/string-array-conversion I have.
考虑以下代码:
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."
};
有人可以向我解释为什么吗?
在第一个示例中(char *hi = "hello";
),您正在创建一个非常量指针,该指针被初始化为指向静态常量字符串“hello”。理论上,这个指针可以指向任何你喜欢的东西。
在第二个示例中(char hi[] = "hello";
)您专门定义了一个数组,而不是指针,因此它引用的地址是不可修改的。请注意,数组可以被视为指向特定内存块的不可修改的指针。
您的第一个示例实际上在 C++ 中编译没有问题(至少是我的编译器)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)