c++ - 指针和字符串文字

标签 c++ pointers string-literals

很多次我都看到下面的说法:

char* ch = "Hello"
cout<<ch;

我得到的输出是“Hello”。我知道 ch 指向字符串“Hello”的第一个字符,而“Hello”是一个字符串文字并存储在只读内存中。因为,ch 存储了字符串字面量中第一个字符的地址,所以不应该声明,

cout<<ch;

给出输出“一个字符的地址”因为它是一个指针变量?相反,它会打印字符串文字本身。 而且,如果我这样写,

ch++;
cout<<ch;

它给出了输出,“ello”。同样,它也发生在更多连续的 ch++ 语句中。

谁能告诉我,为什么会这样?
顺便说一句,我看到了与字符串文字相关的其他问题,但所有这些问题都解决了“为什么我们不能做类似 *ch='a' 的事情?
编辑:我也想问这个关于 C 的问题,它也发生在 C 中,如果我输入,

printf("%s",ch);

为什么?

最佳答案

有重载版本的operator<<

ostream& operator<< (ostream& , const char* );

每当您使用类似以下内容时都会调用此重载:-

char *p = "Hello";
cout << p;

此重载定义了如何打印该字符串而不是打印地址。但是,如果你想打印地址,你可以使用,

cout << (void*) p;

因为这会调用另一个重载,它只打印要流的地址:-

ostream& operator<< (ostream& , void* );

关于c++ - 指针和字符串文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27632481/

相关文章:

objective-c - 不同文件中的字符串文字是否具有相同的内存地址?

c++ - 使用默认值输入模拟参数

c++ - 如何从RAM中读取?

c++ - 如何在 C++ 中获取 a 字符串的一部分?

c - 持有相同 Node 结构地址的两个指针打印不同的值

python:SyntaxError:EOL,同时扫描字符串文字

c++ - 使用自定义数据类型输入参数调用方法时 open62541 客户端失败

c - 在C中为指向指向指针的指针分配内存

c - C 标准的基本指针和数组

c++ - 问候,我的代码中有语法问题。你能帮助我吗?