3 回答

TA貢獻1798條經(jīng)驗 獲得超3個贊
單純的轉(zhuǎn)換對您無濟于事。2D數(shù)組類型和指針到指針類型之間沒有任何兼容性。這樣的轉(zhuǎn)換是沒有意義的。
如果確實需要這樣做,則必須引入一個額外的中間“行索引”數(shù)組,該數(shù)組將彌合2D數(shù)組語義和指針對指針語義之間的鴻溝
Activity solution[a][b];
Activity *solution_rows[a] = { solution[0], solution[1] /* and so on */ };
Activity **mother = solution_rows;
現(xiàn)在訪問mother[i][j]將使您可以訪問solution[i][j]。

TA貢獻1757條經(jīng)驗 獲得超7個贊
您可以對一維數(shù)組而不是二維數(shù)組執(zhí)行此操作的原因與實際數(shù)組元素在內(nèi)存中的存儲方式有關(guān)。對于一維數(shù)組,所有元素都是連續(xù)存儲的,因此表達式array[i]
等同于expression *(array + i)
。如您所見,執(zhí)行數(shù)組索引操作不需要數(shù)組大小。但是,對于二維數(shù)組,元素以“行主要”順序存儲,這意味著第零行中的所有元素都將首先存儲,然后是第一行中的元素,然后是第二行中的元素。 ,等等。因此,表達式array[i][j]
等于*(array + (i * ROW_SIZE) + j)
,其中ROW_SIZE
是每行中元素的數(shù)量。因此,執(zhí)行數(shù)組索引操作需要數(shù)組的行大小,并且將數(shù)組變量強制轉(zhuǎn)換為指針會丟失該信息。

TA貢獻1779條經(jīng)驗 獲得超6個贊
我想將2D對象數(shù)組轉(zhuǎn)換為指針到指針。我怎樣才能做到這一點?
為什么?是否因為接口需要指向指針的指針?
如果是這樣,則需要創(chuàng)建一個包含這些指針的新數(shù)組。
Activity solution[a][b];
Activity* solutionPtrs[a];
for (int i = 0; i < a; ++i)
solutionPtrs[a] = solution[a];
Activity** mother = solutionPtrs;
您為什么不能僅將Tto轉(zhuǎn)換為2D數(shù)組T**?好吧,因為他們彼此無關(guān)!
您可以將a強制轉(zhuǎn)換T[a]為a,T*因為您可以獲得指向數(shù)組第一個元素的指針。
您也可以使用2D數(shù)組來執(zhí)行此操作,但是如果使用a T[a][b]則它會衰減為a,(T[b])*因為2D數(shù)組不是指針數(shù)組,而是數(shù)組數(shù)組。
- 3 回答
- 0 關(guān)注
- 392 瀏覽
添加回答
舉報