看板 C_and_CPP 關於我們 聯絡資訊
我想請問一下,我寫一個測試小程式如下,遇到一個很奇怪的問題我爬文沒找到: char str1[] = "This is a string"; int main() { //以下純粹為對照組 // int array[3] = {1, 2, 3}; int *k; k = array; cout<<k<<endl; //會show出&array[0] cout<<k+1<<endl; //會show出&array[1] cout<<k+2<<endl; //會show出&array[2] cout<<k[0]<<endl; //1 cout<<k[1]<<endl; //2 cout<<k[2]<<endl; //3 //以下為問題發生處 char *p = str1; char **pp; *pp = p; //會當機 pp = &p; //正常運作 cout<<p<<endl; //主要問題所在!! cout<<*pp<<endl; system("pause"); return 0; } pp和*pp各都是一個pointer沒問題,但是*pp指向p指向的位址(即str1)會當機呢? 此外,p好像被compiler當作string來看了, 因為cout<<p<<endl;不是像預期會出現&str1[0] 而是跑出This is a string 嗯....真是奇怪... 能不能請大家為我解惑一下? 先謝謝大家了! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.42.74.178 ※ 編輯: kkroy 來自: 114.42.74.178 (11/26 01:42) ※ 編輯: kkroy 來自: 114.42.74.178 (11/26 01:44)
purpose:用 printf 11/26 01:45
※ 編輯: kkroy 來自: 114.42.74.178 (11/26 01:46) ※ 編輯: kkroy 來自: 114.42.74.178 (11/26 01:48)
james732:char **pp = new char*; *pp = p; 就可以了,可想想原因 11/26 01:54
james732:其實就是十三誡第三 11/26 01:54
legnaleurc:pp 沒有指向任何空間, 對它取值的動作會爆很合理 11/26 01:54
james732:至於如果 cout<<p<<endl; 想看到 &str1[0] 的話 11/26 01:55
james732:改成 cout << (void *)p << endl; 就可以了 11/26 01:56
james732:cout 對於 (char *) 的處理方式 就是當作字串來印 11/26 01:56