作者loveme00835 (最愛朴素妍)
看板C_and_CPP
標題Re: [問題] char array, char* 的問題
時間Fri Nov 26 01:57:50 2010
※ 引述《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