[問題] 陣列這個變數的位置

看板C_and_CPP (C/C++)作者 (J.D.)時間11年前 (2014/10/20 09:40), 11年前編輯推噓3(307)
留言10則, 8人參與, 最新討論串1/1
想請問一下 int a[3] = {1,2,3}; cout << a << endl; cout << &a << endl; 為什麼印出來會是一樣的 照理說 a這個變數 有本身它自己所在的記憶體位置啊 我知道 "陣列不等於指標" 只是有時可以decay成指標 難道是因為這點 Compiler特別設計 自動把 &a 看成 &a[0]嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.34.229.222 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1413769231.A.E96.html

10/20 09:50, , 1F
&a和&a[0]的值相等 但意義不同
10/20 09:50, 1F

10/20 09:51, , 2F
也可以說是 用第一個元素的位址代表整個陣列的位址
10/20 09:51, 2F
如果 &a跟 &a[0]的值相等 這樣子很奇怪耶... a的值 應該是要 a[0]的位置 那麼不就變成 所使用的記憶體位置 上面的值 a 0x7fff5daa 0x7fff5daa a[0] 0x7fff5daa 1 這樣不就 同一個記憶體位置 卻有兩個不同的值? ※ 編輯: musicJD (1.34.229.222), 10/20/2014 10:42:02

10/20 11:00, , 3F
因為你的照理說,a..自己所在的記憶體位置...是錯的
10/20 11:00, 3F

10/20 11:05, , 4F
cout<<*a<<endl;
10/20 11:05, 4F

10/20 12:16, , 5F
a 的值不是 a[0] 的位置. a 是代表整個陣列
10/20 12:16, 5F

10/20 12:42, , 6F
C 的陣列就是一塊連續的記憶體, 所以 a 的位置就是這塊
10/20 12:42, 6F

10/20 12:43, , 7F
連續記憶體的開頭, 所以就等於 a[0] 的位置
10/20 12:43, 7F

10/20 16:30, , 8F
為什麼你用 struct 時沒有同樣的困擾呢?
10/20 16:30, 8F

10/20 22:15, , 9F
這是規定的 才不會有誰幫理髮師刮鬍子的問題(BULLSHIT)
10/20 22:15, 9F

10/25 01:36, , 10F
深入淺出c
10/25 01:36, 10F
文章代碼(AID): #1KH6WFwM (C_and_CPP)
文章代碼(AID): #1KH6WFwM (C_and_CPP)