Re: [問題] char array, char* 的問題
看板C_and_CPP (C/C++)作者loveme00835 (最愛朴素妍)時間15年前 (2010/11/26 01:57)推噓4(4推 0噓 0→)留言4則, 3人參與討論串2/2 (看更多)
※ 引述《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
推
11/26 02:00, , 1F
11/26 02:00, 1F
推
11/26 02:03, , 2F
11/26 02:03, 2F
推
11/26 02:06, , 3F
11/26 02:06, 3F
推
11/26 16:16, , 4F
11/26 16:16, 4F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章