[問題] 陣列名稱&指標常數問題

看板C_and_CPP作者 (沒有暱稱)時間8年前 (2017/02/01 15:43), 8年前編輯推噓7(7014)
留言21則, 7人參與, 最新討論串1/3 (看更多)
關於"陣列名稱的位址"跟"陣列第一個元素的位址"相同但值不同的問題 &name=0x0000 &name[0]=0x0000 name =0x0000 name[0]=1 在板上只看到LPH66大的回文,其實看不太懂 上網看大部分的解釋大概是說: 如果有一個陣列int name[3]={1,2,3}, &name[0]=0x0000 &name[1]=0x0004 &name[2]=0x0008 其陣列名稱name是一個指向陣列第一個元素的位址的指標,也就是指標常數 name=0x0000 name+1=0x0004 name+2=0x0008 如果陣列名稱name碰到兩個operator:sizeof() or & 變成&name就會是指到整個陣列的位址,所以&name+1就會變成0x000C 意思是說陣列名稱(指標常數)其實並沒有自身的位址的概念? 如果只是取陣列元素如name[0]那就會自動decay(網路上都用這個詞)成指標 *(name+0) 如果是使用&name那只是純粹得到整個陣列的位址? &name並不是指標常數的位址? 不知道這樣問大家是否看的懂? 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.160.22.77 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1485934980.A.5D8.html

02/01 16:09, , 1F
所以&name+1就會變成0x000C <-- 阿???
02/01 16:09, 1F

02/01 16:34, , 2F
(&name)+1 跟 &(name +1) 是不一樣滴
02/01 16:34, 2F

02/01 17:01, , 3F
你把陣列大小改一下 再用同樣的方式列出記憶體位置就會
02/01 17:01, 3F

02/01 17:01, , 4F
懂了
02/01 17:01, 4F

02/01 17:39, , 5F
&(name+1)編譯不過 name+1本身不是指標常數不能取&吧
02/01 17:39, 5F
※ 編輯: anoymouse (118.160.31.81), 02/01/2017 17:40:20

02/01 19:40, , 6F
雖然看不懂你想問什麼不過00~0B都是屬於name的記憶體區塊
02/01 19:40, 6F

02/01 19:42, , 7F
但&name不會用00~0B這種表現方式 而是扔給你開頭的位址
02/01 19:42, 7F

02/01 19:43, , 8F
所以陣列名稱是一個const pointer 指向陣列的第一個元素
02/01 19:43, 8F
就是在問陣列名稱的位址跟第一個元素的位址一樣 可是同一個位址卻有兩個不一樣的值 一個是指到陣列第一個元素的位址,一個是name[0]的內容0

02/01 20:11, , 9F
講不對去 (name+1)而已 沒有&
02/01 20:11, 9F
※ 編輯: anoymouse (118.160.31.81), 02/01/2017 21:42:50

02/01 21:56, , 10F
下標運算 name[k] = *(name+k)
02/01 21:56, 10F

02/01 21:57, , 11F
你說有兩個值 因為一個是記憶體位址一個是對位址做*取值
02/01 21:57, 11F

02/01 21:58, , 12F
就是指標的概念
02/01 21:58, 12F

02/02 09:46, , 13F
因為type不一樣,你另外定義一個指標去指就知道了
02/02 09:46, 13F

02/02 09:48, , 14F
int *b = name可以編但int *b = &name會warning,同理
02/02 09:48, 14F

02/02 09:49, , 15F
int (*b)[3] = &name可以編int (*b)[3] = name會warning
02/02 09:49, 15F

02/02 18:31, , 16F
可是要怎麼解釋兩者物理位址顯示是一樣?
02/02 18:31, 16F

02/02 18:39, , 17F
name代表的是陣列位址name和&name的開頭位址都一樣,只
02/02 18:39, 17F

02/02 18:39, , 18F
是type不一樣而已
02/02 18:39, 18F
重寫一遍了 發現沒問清楚 ※ 編輯: anoymouse (223.136.67.39), 02/02/2017 19:38:30 ※ 編輯: anoymouse (118.160.31.81), 02/02/2017 20:04:09 ※ 編輯: anoymouse (118.160.31.81), 02/02/2017 21:20:00

02/03 02:16, , 19F
有人有興趣解釋一下 1[name] 會是甚麼嗎
02/03 02:16, 19F

02/03 02:43, , 20F
BTW, 之前有寫過 #1LKmM17A 可以參考一下
02/03 02:43, 20F

02/03 09:10, , 21F
回F大, 好暗黑的 subscripting 等同算式. 即使語意上沒道理.
02/03 09:10, 21F
文章代碼(AID): #1OaP64NO (C_and_CPP)
文章代碼(AID): #1OaP64NO (C_and_CPP)