gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 19:52:20 24 4
gpt4 key购买 nike

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

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com