作者kkroy (☆㊣↖煞氣ㄟ阿喂↘ξ★)
看板C_and_CPP
標題[問題] char array, char* 的問題
時間Fri Nov 26 01:37:24 2010
我想請問一下,我寫一個測試小程式如下,遇到一個很奇怪的問題我爬文沒找到:
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