Re: [問題] 指標與陣列

看板C_and_CPP作者 (朴髮箍)時間13年前 (2011/05/13 04:48), 編輯推噓2(202)
留言4則, 3人參與, 最新討論串2/3 (看更多)
※ 引述《rosemary0401 (rosemary0401)》之銘言: : void main() : { : char* szTest1 = "test"; : char szTest2[5] = "test"; : //Error : //foo(szTest1); : //OK : foo(szTest2); : cout << szTest2 << endl; : cin.get(); : } : 為什麼傳入szTest1會出錯,但是傳入szTest2是OK的呢? 當妳這樣寫: char *p = "test"; 代表著使用 "test" 這串字來初始化某個生命週期和全域變數一樣 的陣列, 也就是: // 隱藏的程式碼 char anonymous_global_array[ 5 ] = { 't', 'e', 's', 't', '\0' }; 並且讓指標 p 指向它: // 隱藏的程式碼 p = &anonymous_global_array[ 0 ]; 當妳有另一個敘述 char *p2 = "test"; 就如原文推文所說: p2可 能也指向該陣列的第一個元素, 而且可能實際上該陣列是唯讀的. - 若只想定義指標又想更改其指向的值, 可使用如 6.5.2.5 part 13 的作法: char *str = (char []){ "hello mary" }; char const *str2 = "hello mary"; assert( str != str2 ); memset( str, 'A', strlen(str) ); 第一行的效果像是: // 隱藏的程式碼 char anonymous_local_array[] = "hello mary"; char *str = &anonymous_local_array[ 0 ]; 這個匿名陣列在離開函式本體時被消滅. -- ▂▂ ▄▂ T.T.L Listen 2 http://ppt.cc/jIUk ˇ ˇˇ ˇ 說什麼結束 ▃▃ http://ppt.cc/zQtB ψ髮箍 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.197.115

05/13 09:01, , 1F
05/13 09:01, 1F

05/13 13:33, , 2F
長知識 專業推
05/13 13:33, 2F

05/13 16:43, , 3F
看不出哪裡不一樣? 不都是宣告一個字串陣列
05/13 16:43, 3F

05/13 16:44, , 4F
再用一個指標指向字串陣列第一個位置
05/13 16:44, 4F
生命週期不一樣, 修改權限不一樣 ※ 編輯: loveme00835 來自: 140.121.197.115 (05/13 20:31)
文章代碼(AID): #1Dp4UnVe (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1Dp4UnVe (C_and_CPP)