看板 Grad-ProbAsk 關於我們 聯絡資訊
http://i.imgur.com/Wm0pItX.jpg 請問大家這題的答案是甚麼,要怎麼解 為甚麼array的名稱可以加,把b指到a又會發生甚麼事? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.41.142.124 ※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1486142737.A.8FF.html
yupog2003: 5 4 9 5 3 02/04 06:58
yupog2003: 陣列可當指標看,指標a指向陣列a的第一個元素所在的 02/04 06:59
yupog2003: 記憶體空間,因此指標b指向a就代表指標b也指向陣列a的 02/04 06:59
yupog2003: 第一個元素所在的記憶體空間 02/04 07:00
yupog2003: a[1]就是一般的陣列,也就是會輸出5 02/04 07:00
yupog2003: ㄟ我重講,用index講比較好,第一個元素會讓人誤會 02/04 07:02
yupog2003: 陣列可當指標看,指標a指向陣列a之index為0的元素所在 02/04 07:03
yupog2003: 的記憶體空間 02/04 07:03
yupog2003: a=[3][5][9][4],這是陣列,從指標看就變成 02/04 07:04
yupog2003: | 02/04 07:05
yupog2003: *a 02/04 07:05
yupog2003: int *b=a,所以b也指向a所指的記憶體空間 02/04 07:06
yupog2003: a[1]沒有問題,就是輸出5 02/04 07:07
yupog2003: (a+2)[1],就是a的下兩個位址的陣列中,index為1的元素 02/04 07:08
yupog2003: a的下兩個位址的陣列開頭為[9],index為1就是[4] 02/04 07:09
yupog2003: b[2]=a[2]=9,這個沒問題 02/04 07:09
yupog2003: *(++b),先講++b,是先把b的值取出來做運算後再+1 02/04 07:11
yupog2003: 阿不對講錯,是b的值先+1後再取出來做運算,所以現在 02/04 07:11
yupog2003: b的值是a+1,也就是b是指向陣列中index為1的元素 02/04 07:12
yupog2003: 那麼*b=5 02/04 07:13
yupog2003: (b-1)[0],剛剛+1現在-1,所以又回到index為0的元素了 02/04 07:14
yupog2003: 那麼(b-1)[0]就是3 02/04 07:14
yupog2003: 我自己之前有個疑問,一個int不是佔4個byte嗎?位址+1 02/04 07:19
yupog2003: 會不會指到奇怪的地方去,後來發現是不會,因為我們的 02/04 07:19
yupog2003: 指標型態也是int,所以b++的時候b所指向的記憶體位址 02/04 07:20
yupog2003: 會直接+4,這點不用擔心 02/04 07:20
yupog2003: 可以用cout << a << " " << b << " ";做驗證,確實+4 02/04 07:21
june89982014: 非常感謝!! 02/04 21:16