Re: [問題] 一個利用指標存取陣列的問題!
看板C_and_CPP (C/C++)作者minazukimaya (水無月真夜)時間16年前 (2009/10/03 23:22)推噓0(0推 0噓 2→)留言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
10/04 20:52, 1F
→
10/05 11:44, , 2F
10/05 11:44, 2F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章