Re: [問題] 一個利用指標存取陣列的問題!

看板C_and_CPP (C/C++)作者 (水無月真夜)時間16年前 (2009/10/03 23:22), 編輯推噓0(002)
留言2則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《byby615 (Corn)》之銘言: : 標題: [問題] 一個利用指標存取陣列的問題! : 時間: Sat Oct 3 17:33:23 2009 : : 假設我宣告一個3 ×7的陣列並設定初值: : 例︰int QQQ[3][7]={初值(省略不打)} : 然後我用*(&QQQ[0][0]+7*i+j)去讀 : 結果可以確實讀取第i列第j行的值 : 但是又因為宣告陣列時各元素的記憶體是連續排在一起的 : 而且QQQ又等於&QQQ[0][0] QQQ的type是int[3][7] &QQQ[0][0]的type是int * 這兩者當然是不同的.. : : 所以我想說*(QQQ+7*i+j)應該也可以確實讀出才對 : : 但是卻連編譯也不能編譯 : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 140.124.72.6 : → weiyucsie:型態吧... 10/03 18:26 : → bleed1979:*((int *)QQQ+7*i+j) 先把QQQ轉型 10/03 19:22 : 推 snowlike:QQQ=&QQQ[0] 10/03 21:17 : → byby615:那為什麼*(*(QQQ+i)+j)裡的QQQ不用轉型呢? 10/03 21:48 QQQ + i QQQ的type是int[3][7] 碰到 + i 的時侯,會decay(退化)成 int (*)[7] 也就是指向type int[7]的指標 取值操作(*)之後型態是 int[7] int[7]再碰到+j的時侯 又decay成 int* 然後取值操作(*)的時侯拿回一個int 這樣沒有問題.. 但是你的 *(QQQ + 7*i + j) QQQ碰到 + 7*i + j 會decay 成 int(*)[7] 再取址之後變成int[7] 如果你把它assign給一個int 比如 int temp = *(QQQ + 7*i + j) 當然會是錯的.. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.170.168.65

10/04 20:52, , 1F
請問什麼是退化啊?我學C都沒有聽過退化這個名詞
10/04 20:52, 1F

10/05 11:44, , 2F
google查就有了..
10/05 11:44, 2F
文章代碼(AID): #1AnsnGCr (C_and_CPP)
文章代碼(AID): #1AnsnGCr (C_and_CPP)