[問題] 陣列名稱所存的值與其所在的位置,兩者位
問題(Question):
假設有一個陣列,叫做int a[5];
則a==&a==&a[0],a==&a[0]可以理解,但為何a==&a?
a的值是陣列開頭的位置(假設是1000),且a本身也佔有記憶體位置(假設是2000),
那&a不是應該是那個記憶體空間位置(2000)嗎?
所以應該是兩個不同的位置,但為何程式跑出來a==&a:
int main (int argc,char *argv[]){
int a[5];
printf("%p %p %p",a,&a[0],&a);
//結果為000000000062FE00 000000000062FE00 000000000062FE00
return 0;
}
二維陣列也是一樣的狀況,若有一陣列叫做num[3][4],則num==&num
num[0]==&num[0] num[1]==&num[1]......
我看書上都沒有解釋的很清楚,希望有人可以解惑,拜託了。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.160.9.176 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1623072705.A.616.html
推
06/07 21:46,
2年前
, 1F
06/07 21:46, 1F
有看沒有懂= =
推
06/07 23:49,
2年前
, 2F
06/07 23:49, 2F
→
06/07 23:49,
2年前
, 3F
06/07 23:49, 3F
→
06/07 23:51,
2年前
, 4F
06/07 23:51, 4F
所以&a也是指陣列的開頭位置嗎?
a已經是陣列開頭的位置,&a為何不是陣列開頭位置對應的記憶體位置?
還是不懂
→
06/07 23:53,
2年前
, 5F
06/07 23:53, 5F
→
06/07 23:53,
2年前
, 6F
06/07 23:53, 6F
→
06/08 00:36,
2年前
, 7F
06/08 00:36, 7F
我想a本身存的是陣列開頭位置,既然有存東西那就需要配置一塊記憶體位置
→
06/08 00:43,
2年前
, 8F
06/08 00:43, 8F
→
06/08 00:43,
2年前
, 9F
06/08 00:43, 9F
→
06/08 00:43,
2年前
, 10F
06/08 00:43, 10F
→
06/08 00:43,
2年前
, 11F
06/08 00:43, 11F
→
06/08 03:07,
2年前
, 12F
06/08 03:07, 12F
a跟num是陣列本身
→
06/08 11:02,
2年前
, 13F
06/08 11:02, 13F
→
06/08 11:02,
2年前
, 14F
06/08 11:02, 14F
→
06/08 11:02,
2年前
, 15F
06/08 11:02, 15F
→
06/08 11:02,
2年前
, 16F
06/08 11:02, 16F
→
06/08 11:02,
2年前
, 17F
06/08 11:02, 17F
a是陣列本身,所以&a是陣列本身的位置,其實就是陣列開頭的位置,也就是&a[0]
所以&a==&a[0],又a可隱性轉型成&a[0],所以a==&a[0]
因此&a==&a[0]==a
感謝大大的說明
→
06/08 11:19,
2年前
, 18F
06/08 11:19, 18F
推
06/08 11:24,
2年前
, 19F
06/08 11:24, 19F
→
06/08 11:24,
2年前
, 20F
06/08 11:24, 20F
→
06/08 11:25,
2年前
, 21F
06/08 11:25, 21F
→
06/08 11:26,
2年前
, 22F
06/08 11:26, 22F
→
06/08 11:26,
2年前
, 23F
06/08 11:26, 23F
→
06/08 11:26,
2年前
, 24F
06/08 11:26, 24F
※ 編輯: lueichun (1.164.174.184 臺灣), 06/08/2021 13:45:29
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章