[问题] 一个string的奇怪问题

楼主: RealJack   2015-05-18 21:01:03
string s1("abc");
char *p=&s1[2];
cout<<*p<<endl; //印出c
cout<<p<<endl; //印出c <= why?
为何最后一行印出来的不是地址?
目前卡关中,有请各位解惑
谢谢
作者: azureblaze (AzureBlaze)   2015-05-18 21:05:00
cout << (void*)p << endl;因为char*同时也可是字串,所以iostream自作聪明
楼主: RealJack   2015-05-18 21:18:00
感谢楼上!
作者: MOONRAKER (㊣牛鹤鳗毛人)   2015-05-18 21:19:00
阿不然你想 p="c" 后 cout << p会跑出什么
楼主: RealJack   2015-05-18 23:25:00
我认为应该印出指向'c'的位址,像是0x5c1450但我忘了char *是C式字串,会从指到的位址一直印到'\0'
作者: dritchie (卍~迈斯纳效应~卍)   2015-05-19 00:31:00
好危险的写法...
作者: MOONRAKER (㊣牛鹤鳗毛人)   2015-05-19 07:38:00
是阿,char *当字串印出,这是规定的
作者: dirkc (3781615)   2015-05-23 00:32:00
危险地方应是在于s1如果赋值或修改后,p可能指向无效位址
楼主: RealJack   2015-05-24 14:36:00
楼上意思是赋予超过s1分配空间的字串,会重新分配空间p指的位置就不是s1新分配空间的位置,是这个意思吗?

Links booklink

Contact Us: admin [ a t ] ucptt.com