作者anoymouse (沒有暱稱)
看板C_and_CPP
標題[問題] 陣列名稱&指標常數問題
時間Wed Feb 1 15:42:58 2017
關於"陣列名稱的位址"跟"陣列第一個元素的位址"相同但值不同的問題
&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://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1485934980.A.5D8.html
1F:推 chuegou: 所以&name+1就會變成0x000C <-- 阿??? 02/01 16:09
2F:推 friends29: (&name)+1 跟 &(name +1) 是不一樣滴 02/01 16:34
3F:→ friends29: 你把陣列大小改一下 再用同樣的方式列出記憶體位置就會 02/01 17:01
4F:→ friends29: 懂了 02/01 17:01
5F:→ anoymouse: &(name+1)編譯不過 name+1本身不是指標常數不能取&吧 02/01 17:39
※ 編輯: anoymouse (118.160.31.81), 02/01/2017 17:40:20
6F:推 ko27tye: 雖然看不懂你想問什麼不過00~0B都是屬於name的記憶體區塊 02/01 19:40
7F:→ ko27tye: 但&name不會用00~0B這種表現方式 而是扔給你開頭的位址 02/01 19:42
8F:→ ko27tye: 所以陣列名稱是一個const pointer 指向陣列的第一個元素 02/01 19:43
就是在問陣列名稱的位址跟第一個元素的位址一樣 可是同一個位址卻有兩個不一樣的值
一個是指到陣列第一個元素的位址,一個是name[0]的內容0
9F:→ friends29: 講不對去 (name+1)而已 沒有& 02/01 20:11
※ 編輯: anoymouse (118.160.31.81), 02/01/2017 21:42:50
10F:推 ko27tye: 下標運算 name[k] = *(name+k) 02/01 21:56
11F:→ ko27tye: 你說有兩個值 因為一個是記憶體位址一個是對位址做*取值 02/01 21:57
12F:→ ko27tye: 就是指標的概念02/01 21:58
13F:推 boss0405: 因為type不一樣,你另外定義一個指標去指就知道了02/02 09:46
14F:→ boss0405: int *b = name可以編但int *b = &name會warning,同理02/02 09:48
15F:→ boss0405: int (*b)[3] = &name可以編int (*b)[3] = name會warning02/02 09:49
16F:→ anoymouse: 可是要怎麼解釋兩者物理位址顯示是一樣? 02/02 18:31
17F:推 boss0405: name代表的是陣列位址name和&name的開頭位址都一樣,只02/02 18:39
18F:→ boss0405: 是type不一樣而已02/02 18:39
重寫一遍了 發現沒問清楚
※ 編輯: 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
19F:→ Feis: 有人有興趣解釋一下 1[name] 會是甚麼嗎 02/03 02:16
20F:→ Feis: BTW, 之前有寫過 #1LKmM17A 可以參考一下 02/03 02:43
21F:推 yvb: 回F大, 好暗黑的 subscripting 等同算式. 即使語意上沒道理. 02/03 09:10