双引号的属性

时间:2018-02-22 22:44:33

标签: c++ arrays string pointers double-quotes

我想知道双引号有哪些属性,特别是与初始化char指针有关。

cmd.BindByName = True

以上代码打印两次hello。我知道使用双引号表示一个字符串,或者一个末尾带有空字符的char数组。由于ptr正在寻找要分配的内存地址(char *),我猜测“hello”会解析为'h'的内存地址,尽管你也在填充char的值。阵列的其余部分?如果是这种情况,那是否意味着在上面的代码中

char *ptr="hello";
char array[6]={'h','e','l','l','o'};
cout<<ptr<<endl<<array<<endl;

双引号在内存中的某处创建一个字符串,然后将ptr分配给该字符串的第一个元素,而

char *ptr="hello";

在内存中的某处创建一个数组,然后根据赋值运算符的右侧为每个索引分配值?

2 个答案:

答案 0 :(得分:2)

这里有两点值得注意。

Array
(
    [percent] => +75.03%
    [diff] => +1307417
)

这将在堆栈上分配6个字节并将它们初始化为“hello \ 0”;以下是等效的:

char array[6]={'h','e','l','l','o'};

但是,以下是不同的。

char array[] = "hello";
char array[6] = "hello";

这将在堆栈上分配一个指针,指向常量字符串“hello \ 0”。这是一个重要的区别,如果您更改值char *ptr="hello"; 指向的值,您将导致未定义的行为,因为您将更改它指向的常量值。

示例:

ptr

答案 1 :(得分:-1)

对于字符串,有一个特殊的终端字符\0,它被添加到最后。这告诉它那是字符串的结尾。

所以,如果你有一个字符串&#34;你好&#34;,它会继续阅读每个字符:&#34; h&#34;,&#34; e&#34;,&#34 ; l&#34;,&#34; l&#34;,&#34; o&#34;,&#34; \ 0&#34;,告诉它停止。

字符数组类似,但没有终端字符。相反,数组本身的长度表示要读取多少个字符(这对于所有方法都不一定有效)。