亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

2D數組到指針到指針的轉換

2D數組到指針到指針的轉換

C++
牛魔王的故事 2019-11-18 10:39:24
Activity solution[a][b];...Activity **mother = solution;我想將2D對象數組轉換為指針到指針。我怎樣才能做到這一點;我在Google上搜索了它。但是我只找到一個維數組的例子。
查看完整描述

3 回答

?
呼如林

TA貢獻1798條經驗 獲得超3個贊

單純的轉換對您無濟于事。2D數組類型和指針到指針類型之間沒有任何兼容性。這樣的轉換是沒有意義的。


如果確實需要這樣做,則必須引入一個額外的中間“行索引”數組,該數組將彌合2D數組語義和指針對指針語義之間的鴻溝


Activity solution[a][b];


Activity *solution_rows[a] = { solution[0], solution[1] /* and so on */ };


Activity **mother = solution_rows;

現在訪問mother[i][j]將使您可以訪問solution[i][j]。


查看完整回答
反對 回復 2019-11-18
?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

您可以對一維數組而不是二維數組執行此操作的原因與實際數組元素在內存中的存儲方式有關。對于一維數組,所有元素都是連續存儲的,因此表達式array[i]等同于expression *(array + i)。如您所見,執行數組索引操作不需要數組大小。但是,對于二維數組,元素以“行主要”順序存儲,這意味著第零行中的所有元素都將首先存儲,然后是第一行中的元素,然后是第二行中的元素。 ,等等。因此,表達式array[i][j]等于*(array + (i * ROW_SIZE) + j),其中ROW_SIZE是每行中元素的數量。因此,執行數組索引操作需要數組的行大小,并且將數組變量強制轉換為指針會丟失該信息。


查看完整回答
反對 回復 2019-11-18
?
哆啦的時光機

TA貢獻1779條經驗 獲得超6個贊

我想將2D對象數組轉換為指針到指針。我怎樣才能做到這一點?


為什么?是否因為接口需要指向指針的指針?


如果是這樣,則需要創建一個包含這些指針的新數組。


Activity solution[a][b];


Activity* solutionPtrs[a];

for (int i = 0; i < a; ++i)

    solutionPtrs[a] = solution[a];


Activity** mother = solutionPtrs;

您為什么不能僅將Tto轉換為2D數組T**?好吧,因為他們彼此無關!


您可以將a強制轉換T[a]為a,T*因為您可以獲得指向數組第一個元素的指針。


您也可以使用2D數組來執行此操作,但是如果使用a T[a][b]則它會衰減為a,(T[b])*因為2D數組不是指針數組,而是數組數組。


查看完整回答
反對 回復 2019-11-18
  • 3 回答
  • 0 關注
  • 398 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號