[商管] 104成大資管計概

看板Grad-ProbAsk作者 (JJ)時間9年前 (2017/02/04 01:25), 編輯推噓2(2026)
留言28則, 2人參與, 最新討論串1/1
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

02/04 06:58, , 1F
5 4 9 5 3
02/04 06:58, 1F

02/04 06:59, , 2F
陣列可當指標看,指標a指向陣列a的第一個元素所在的
02/04 06:59, 2F

02/04 06:59, , 3F
記憶體空間,因此指標b指向a就代表指標b也指向陣列a的
02/04 06:59, 3F

02/04 07:00, , 4F
第一個元素所在的記憶體空間
02/04 07:00, 4F

02/04 07:00, , 5F
a[1]就是一般的陣列,也就是會輸出5
02/04 07:00, 5F

02/04 07:02, , 6F
ㄟ我重講,用index講比較好,第一個元素會讓人誤會
02/04 07:02, 6F

02/04 07:03, , 7F
陣列可當指標看,指標a指向陣列a之index為0的元素所在
02/04 07:03, 7F

02/04 07:03, , 8F
的記憶體空間
02/04 07:03, 8F

02/04 07:04, , 9F
a=[3][5][9][4],這是陣列,從指標看就變成
02/04 07:04, 9F

02/04 07:05, , 10F
|
02/04 07:05, 10F

02/04 07:05, , 11F
*a
02/04 07:05, 11F

02/04 07:06, , 12F
int *b=a,所以b也指向a所指的記憶體空間
02/04 07:06, 12F

02/04 07:07, , 13F
a[1]沒有問題,就是輸出5
02/04 07:07, 13F

02/04 07:08, , 14F
(a+2)[1],就是a的下兩個位址的陣列中,index為1的元素
02/04 07:08, 14F

02/04 07:09, , 15F
a的下兩個位址的陣列開頭為[9],index為1就是[4]
02/04 07:09, 15F

02/04 07:09, , 16F
b[2]=a[2]=9,這個沒問題
02/04 07:09, 16F

02/04 07:11, , 17F
*(++b),先講++b,是先把b的值取出來做運算後再+1
02/04 07:11, 17F

02/04 07:11, , 18F
阿不對講錯,是b的值先+1後再取出來做運算,所以現在
02/04 07:11, 18F

02/04 07:12, , 19F
b的值是a+1,也就是b是指向陣列中index為1的元素
02/04 07:12, 19F

02/04 07:13, , 20F
那麼*b=5
02/04 07:13, 20F

02/04 07:14, , 21F
(b-1)[0],剛剛+1現在-1,所以又回到index為0的元素了
02/04 07:14, 21F

02/04 07:14, , 22F
那麼(b-1)[0]就是3
02/04 07:14, 22F

02/04 07:19, , 23F
我自己之前有個疑問,一個int不是佔4個byte嗎?位址+1
02/04 07:19, 23F

02/04 07:19, , 24F
會不會指到奇怪的地方去,後來發現是不會,因為我們的
02/04 07:19, 24F

02/04 07:20, , 25F
指標型態也是int,所以b++的時候b所指向的記憶體位址
02/04 07:20, 25F

02/04 07:20, , 26F
會直接+4,這點不用擔心
02/04 07:20, 26F

02/04 07:21, , 27F
可以用cout << a << " " << b << " ";做驗證,確實+4
02/04 07:21, 27F

02/04 21:16, , 28F
非常感謝!!
02/04 21:16, 28F
文章代碼(AID): #1ObBqHZ_ (Grad-ProbAsk)