很多次我都看到下面的说法:
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/