Re: [問題] 指標與陣列
※ 引述《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)
討論串 (同標題文章)