Re: [問題] 很初級的指標問題
int *p;
請想像你拿了一張廢紙,紙上會寫一個亂數
上面這個數字是某個置物櫃號碼
(1) int *p;
p = 300;
你在紙上抄了300號置物櫃
但是這個置物櫃並不一定是你的
你只是抄下這個數字,其實並沒有問題
但如果想要 *p = 100; 把 100 這個值塞入 300 號這個櫃子
或者 printf("%d", *p); 想把 300 號這個櫃子的東西拿出來
就不一定是合法的
(2) char *p;
p = "abcd";
這個比較難比喻,因為 compiler 會自動找五個空的櫃子
把 "abcd\0" 塞進去,然後把第一個櫃子的號碼寫在你的紙上
這個動作並沒有問題
(3) int *p; scanf("%d",p);
(4) char *p; scanf("%s",p);
你把使用者輸入的東西塞到置物櫃
但這個時候紙上的號碼是亂數
所以根本不知道會塞到哪裡去
這個寫法的問題最大,因為你不知道p這張紙上的數字
所以你的東西不知道會塞到哪裡去
(5) int *p=300;
其實跟 (1) 是一樣的
(6) char *p="test";
這個跟 (2) 是一樣的
所以你熟悉的
int *p;
int i = 0;
p = &i;
這種寫法,compiler會先找個空的置物櫃當作i,把0塞進去
再把置物櫃的號碼讓你抄在p上面,這也是合法的
(嚴格來說是sizeof(int)個櫃子...XD)
結論是:
int *p;
在這張紙上,你可以隨便填個數字都沒有關係
p = 300; 或什麼值都好
但如果紙上的號碼那個櫃子不是你的
(不管是你亂寫的,還是原本的亂數)
那你去開櫃子就會出問題....XD
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.67.56.196
→
11/06 23:08, , 1F
11/06 23:08, 1F
→
11/06 23:09, , 2F
11/06 23:09, 2F
推
11/06 23:48, , 3F
11/06 23:48, 3F
→
11/06 23:48, , 4F
11/06 23:48, 4F
→
11/06 23:49, , 5F
11/06 23:49, 5F
→
11/07 00:20, , 6F
11/07 00:20, 6F
→
11/07 00:21, , 7F
11/07 00:21, 7F
→
11/07 01:41, , 8F
11/07 01:41, 8F
→
11/07 01:41, , 9F
11/07 01:41, 9F
推
11/07 01:59, , 10F
11/07 01:59, 10F
推
11/07 08:45, , 11F
11/07 08:45, 11F
※ 編輯: james732 來自: 114.32.92.122 (11/07 09:11)
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章