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]。

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

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數組不是指針數組,而是數組數組。
- 3 回答
- 0 關注
- 398 瀏覽
添加回答
舉報