推 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