簡體   English   中英

為什么指向二維數組的指針這樣分配新的int

[英]Why does this pointer to pointer two dimensional array assign new int like this

我正在努力理解以下代碼:

int **p_p_tictactoe;
p_p_tictactoe = new int*[ 3 ];
for ( int i = 0; i < 3; i++ )
{
p_p_tictactoe[ i ] = new int[ 3 ];
}

在線上: p_p_tictactoe[i] = new int [3]; 方括號一次取消對p_p_tictactoe的引用,以便我們查看p_p_ticatactoe存儲的地址中的值,該地址是另一個地址,因為它是指向指針的指針。 然后,將這個地址分配給一個新的int,但不應將其分配給該地址處的值,而不是像這樣的地址本身: *p_p_tictactoe[i] = new int[3]

p_p_tictactoe是一個int **

因此, p_p_tictactoe[i]必須是int *

因此, *p_p_tictactoe[i]必須是一個單獨的int

new的結果(在此處為int *分配給int不會有任何有用的結果。

另一種有用的查看方式: *p_p_tictactoe[i]等效於p_p_tictactoe[i][0] 顯然,這是一個int ,即單個單元格,並且在其中填充了一個指針將不起作用。

沒有。

*p_p_tictactoe[i] (也拼寫為p_p_tictactoe[i][0] )將是您在該行上創建的數組中的int之一。

順便說一句,這是一個非常低效的內存布局。 除非您的數組可能會更改尺寸或呈鋸齒狀,否則最好使用int的單個塊,並在其頂部偽造二維索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM