看板 C_and_CPP 關於我們 聯絡資訊
我一直覺得怪怪的,詢問一下版上有沒有更好的講法 在陣列跟指標的部分 書上說:array陣列名稱"本身就是個指標,他的值是指向第一元素的地址 假設我宣告一個陣列 int array[5]; 也就是若陣列地址為下: array[0]={31}; //地址為0x22ff31 array[1]={70}; //0x22ff35 array[2]={12}; //0x22ff39 array[3]={3}; //0x22ff3d array[4]={88}; //0x22ff41 而array本身是個指標,它的值為第一個元素的地址, 而它的地址也是同一個地址,如下 array={0x22ff31} //而這個指標本身的地址又是0x22ff31 那我們知道地址是唯一的,若以指標來看來,它的值為0x22ff31 若以第一個元素來看,他的值又是31 這樣不是很矛盾嗎? -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 134.208.1.29
milen:存地址跟存資料是不一樣的"位址" 09/25 16:07
stupid0319:array={0x22ff31} << 這個是什麼東西???? 09/25 16:55
先感謝各位推文,就是如果我 printf("%d",array); 那他會輸出是0x22ff31 如果我輸出 printf("%p",&array); 那他的地址也是022ff31 那問題就是如果我們輸出 printf("%p",&array[0]); 地址也是022ff31,也就是array跟array[0],其實是同一個地址 但是array[0]的值是31 我們輸出 printf("d",array[0]); 他會輸出31 這樣感覺就很矛盾,同樣輸出同一個地址的"值" 輸出array是0x22ff31 而輸出array[0]卻是31
EdisonX:大括號不要亂加,那是有意義的。 09/25 17:07
EdisonX:另原意應是,這個陣列的「位址值」,就是這個陣列第一個元 09/25 17:08
EdisonX:素的「位址值」,而你所的 31 指的是第一個元素「內含值」 09/25 17:08
※ 編輯: Fan383 來自: 134.208.1.29 (09/25 17:35)
MOONRAKER:為了方便,這兩個值是相等的。你無法找出「存array位址 09/25 17:28
MOONRAKER:的記憶體」的位址,否則會沒完沒了 09/25 17:29
MOONRAKER:(喔!怎麼這麼像理髮師的故事) 09/25 17:29
LPH66:以我之前回的一篇文章的說法來說 0x22ff31 這個指標是綁在 09/25 17:35
LPH66:array 這個符號上 當有其他的位址運算需求時(如索引陣列) 09/25 17:36
LPH66:它就會直接代入 0x22ff31 這位置 因此產生程式碼時 09/25 17:36
LPH66:0x22ff31 這個值會直接出現在指令上 09/25 17:37
LPH66:它不會再用一個空間來存 "0x22ff31" 這個值 09/25 17:37
stupid0319:這就是傳說中C語言新手必需經過指標障礙嗎?XD 09/25 17:43
stupid0319:你把遊戲修改大師拿出來,隨便改個遊戲就知道什麼叫指標 09/25 17:45
BlazarArc:原po問題不是指標吧,array name在size_of跟&不轉型指標 09/25 17:59
BlazarArc:http://0rz.tw/Js3xE (stackoverflow) 其實蠻好google的 09/25 18:00
BlazarArc:這樣講好像不太對 正在看C FAQ 09/25 18:07
BlazarArc:http://0rz.tw/yR7a2 (C FAQ) 發現其實上面推文有講了XD 09/25 18:16
diabloevagto:我記得之前有人糾正過說"陣列並不是指標" 09/25 18:40