【发布时间】:2018-02-22 22:44:32
【问题描述】:
我想知道双引号有什么属性,尤其是在初始化 char 指针方面。
char *ptr="hello";
char array[6]={'h','e','l','l','o'};
cout<<ptr<<endl<<array<<endl;
上面的代码打印 hello 两次。我知道使用双引号表示一个字符串,或者一个末尾带有空字符的 char 数组。由于 ptr 正在寻找要分配的内存地址 (char*),因此我猜测“hello”解析为“h”的内存地址,尽管您还填写了 char 值阵列的其余部分?如果是这样的话,是不是意味着在上面的代码中
char *ptr="hello";
双引号在内存中的某处创建一个字符串,然后将ptr分配给该字符串的第一个元素,而
char array[6]={'h','e','l','l','o'};
在内存中的某处创建一个数组,然后根据赋值运算符的右侧为每个索引分配值?
【问题讨论】:
-
您需要打开编译器警告。
char *ptr="hello";应该警告你或者错误提示它是不允许的。 -
@NathanOliver:尽管考虑到 C 字符串文字不是
const(尽管修改内容是未定义的行为),char *ptr = "hello";在 C 中是合法的,并且许多编译器在 C++ 中允许它(如只要你不分配它)除非警告被提高到迂腐的水平。 -
@ShadowRanger 该问题未标记为 C,并且该转换在 C++03(近 15 年前)中已弃用,此后已正式从该语言中删除。
标签: c++ arrays string pointers double-quotes