[問題] 剛開始學C的新手遇到的問題

看板Programming作者 (Phantom)時間9年前 (2015/12/23 11:40), 9年前編輯推噓1(104)
留言5則, 4人參與, 最新討論串1/1
最近在學指標的時候遇到一些問題 先po程式碼 int *p = 0, num[3][3]; srand(time(NULL)); for (p = &num[0][0]; p <= &num[3][3]; p++) { *p= rand()%10+1; p++; } for (p = &num[0][0]; p <= &num[3][3]; p++) { printf("%d\n", *p); p++; } 主要是練習利用指標達成陣列的應用 將儲存的隨機數存到指標所指向的位置 在執行的時候遇到一些問題 1.為什麼整個迴圈只跑了七次而不是九次? 2.當我把陣列改成4*4的時候會發生存取違規,請問這是為什麼呢? 3.為什麼我這樣寫指標的記憶體是位移8? 不是應該是4嗎? 4.想順便請教二維陣列的記憶體配置 謝謝解答Orz -- 作者 NerVGear (Phantom) 看板 Gossiping 標題 [問卦] 有沒有記得最熟課文的八卦 時間 Thu Apr 9 17:16:15 2015 ───────────────────────────────────────

04/09 17:16,
孫中山看精子往上游?
04/09 17:16

04/09 17:17,
靠杯 打錯 腦子是想小魚逆游?打出精子= =
04/09 17:17
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.121.43.242 ※ 文章網址: https://www.ptt.cc/bbs/Programming/M.1450842015.A.AB0.html

12/23 11:48, , 1F
p<=num[3][3]
12/23 11:48, 1F
剛剛發現PO上來少打的& 謝謝提醒 原本是有&的XD

12/23 13:39, , 2F
你for本身跟迴圈內都p++ 這樣一次就加兩個了
12/23 13:39, 2F
把p++去掉了 但是卻出現違規存取 請問這是什麼問題呢? ※ 編輯: NerVGear (36.231.27.115), 12/23/2015 14:09:43

12/23 15:19, , 3F
num[3][3] 本身就是違規存取了
12/23 15:19, 3F

12/23 15:19, , 4F
改成 p <= & num[2][2]
12/23 15:19, 4F
想請問為什麼是違規呢? ※ 編輯: NerVGear (36.231.27.115), 12/23/2015 15:35:18

12/23 16:45, , 5F
因為index 3其實是第4個元素
12/23 16:45, 5F
對齁 一直忘記這個Orz 謝謝 ※ 編輯: NerVGear (223.136.61.4), 12/23/2015 17:46:36
文章代碼(AID): #1MUXUVgm (Programming)
文章代碼(AID): #1MUXUVgm (Programming)