看板 C_and_CPP 關於我們 聯絡資訊
string s1("abc"); char *p=&s1[2]; cout<<*p<<endl; //印出c cout<<p<<endl; //印出c <= why? 為何最後一行印出來的不是地址? 目前卡關中,有請各位解惑 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.25.242.77 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1431954067.A.AFE.html
azureblaze: cout << (void*)p << endl; 05/18 21:05
azureblaze: 因為char*同時也可是字串,所以iostream自作聰明 05/18 21:06
RealJack: 感謝樓上! 05/18 21:18
MOONRAKER: 阿不然你想 p="c" 後 cout << p會跑出什麼 05/18 21:19
RealJack: 我認為應該印出指向'c'的位址,像是0x5c1450 05/18 23:25
RealJack: 但我忘了char *是C式字串,會從指到的位址一直印到'\0' 05/18 23:27
dritchie: 好危險的寫法... 05/19 00:31
MOONRAKER: 是阿,char *當字串印出,這是規定的 05/19 07:38
dirkc: 危險地方應是在於s1如果賦值或修改後,p可能指向無效位址 05/23 00:32
RealJack: 樓上意思是賦予超過s1分配空間的字串,會重新分配空間 05/24 14:36
RealJack: p指的位置就不是s1新分配空間的位置,是這個意思嗎? 05/24 14:37