看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《kkroy (☆㊣↖煞氣ㄟ阿喂↘ξ★)》之銘言: : 我想請問一下,我寫一個測試小程式如下,遇到一個很奇怪的問題我爬文沒找到: : 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 *p = &str1[0]; : char **pp; : *pp = p; //會當機 型態:(char**) pp ─┐ ↓ ┌┐ (char*) └┘─┐ ← 你想要讓中間那個不知道配置在 ↓ 哪的指標變數去指到 str1 第一個 (char) str1[0] 字元, 難保不會存取違規 : pp = &p; //正常運作 型態:(char**) pp ─┐ ↓ (char*) p : cout<<p<<endl; //主要問題所在!! 多載運算子 std::operator<<, 你呼叫到 ostream& operator<< (ostream& out, const char* s ); 這個版本, 他是當作字串來印, 所以不會把你 p 的原值印出 請使用 cout << static_cast<void*>( p ) << endl; 直接跟 他講你要印指標的值 : cout<<*pp<<endl; 跟上一行一樣問題 : system("pause"); : return 0; : } : pp和*pp各都是一個pointer沒問題,*pp因為還沒分配空間,取值會當機。 : 此外,p好像被compiler當作string來看了, : 因為cout<<p<<endl;不是像預期會出現&str1[0] : 而是跑出This is a string : 嗯....真是奇怪... : 能不能請大家為我解惑一下? : 先謝謝大家了! -- ◢████ ◢█ ◢██◣ ◢█ ◢███ ◢█ T-ara版怎麼去 ████◢█████s ~> T-ara ███ █ ◢█歡迎您的光臨 ███████████恩靜智妍孝敏 ███ ██ 素妍居麗寶藍 ████◥██◤ █████ψmakigoto123 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.197.115
james732:推用心 11/26 02:00
kkroy:噢噢! 我知道了! 很感謝你! 11/26 02:03
kkroy:再推一次! 11/26 02:06
xatier:推! 11/26 16:16