pul*_*ion 3 c++ pointers string-literals
很多次我看到以下陈述:
char* ch = "Hello"
cout<<ch;
Run Code Online (Sandbox Code Playgroud)
我得到的输出是" 你好 ".我知道ch指向字符串"Hello"的第一个字符,而"Hello"是字符串文字并存储在只读存储器中.因为,ch将第一个字符的地址存储在字符串文字中,所以不应该是语句,
cout<<ch;
Run Code Online (Sandbox Code Playgroud)
给输出" 一个字符的地址 "因为,它是一个指针变量?相反,它打印字符串文字本身.而且,如果我写这个,
ch++;
cout<<ch;
Run Code Online (Sandbox Code Playgroud)
它给出了输出" ello ".同样地,它也发生在更多连续的ch ++语句中.
任何人都可以告诉我,为什么会这样?
顺便说一句,我已经看到了与字符串文字有关的其他问题,但是所有这些问题都解决了"为什么我们不能做类似*ch ='a'的问题?
编辑:我也想问这个参考C,它如果我输入,也会发生在C中,
printf("%s",ch);
Run Code Online (Sandbox Code Playgroud)
为什么?
有重载版本 operator<<
ostream& operator<< (ostream& , const char* );
Run Code Online (Sandbox Code Playgroud)
只要您使用以下内容,就会调用此重载: -
char *p = "Hello";
cout << p;
Run Code Online (Sandbox Code Playgroud)
此重载定义了如何打印该字符串而不是打印地址.但是,如果要打印地址,可以使用,
cout << (void*) p;
Run Code Online (Sandbox Code Playgroud)
因为这将调用另一个重载,只是打印地址流: -
ostream& operator<< (ostream& , void* );
Run Code Online (Sandbox Code Playgroud)