簡體   English   中英

如何將二維數組分配給指針?

[英]How can I assign a two dimensional array to a pointer?

我想將數組分配給指針,以便可以使用它

int arrayA[2][2] = {{1,2},{3,4}};
int arrayB[3][1] = {{1},{2},{3}};
int** arrayC;
if(case1)
   arrayC = arrayA;
if(case2)
   arrayC = arrayB;
//work with arrayC

我能做什么?

編輯:找到了另一個解決方案。 查看答案

int **與2D數組int [][]根本不同,因此數據類型不兼容。

進行上述示例中嘗試的操作的唯一簡單方法是將2D數組展平為1D數組:

int arrayA[2 * 2] = { 1, 2, 3, 4 };
int arrayB[3 * 1] = { 1, 2, 3 };
int* arrayC;
if (case1)
   arrayC = arrayA;
if (case2)
   arrayC = arrayB;

顯然,您將需要自己進行顯式的數組索引計算。

您不能將2D數組分配給指針(正確的術語是轉換)。 原因是一維數組到指針(指向第一個元素)的轉換不適用於更高的維度。

您可以做的是聲明一個指向兩個int數組的指針。 在這種情況下,轉換有效。

int arrayA[2][2] = {{1,2},{3,4}};
int   (*arrayB)[2];
arrayB = arrayA;

不過,要實現的是*arrayB*arrayB的第一個元素的arrayA 在此示例中,該元素是使用{1,2}初始化的數組。

在原始問題被編輯為提出其他問題之后進行編輯以添加以下內容。

上面的確需要尺寸的一致性,因此在尺寸不匹配的您(現在已編輯的示例)中將不起作用。 它是需要匹配的最后一個(最右邊)尺寸。

如果要使尺寸不匹配,除了將數組展平為單個尺寸外,沒有其他解決方案。

我找到了一個動態初始化數組的解決方案:

int arrayA[2][2] = { { 1, 2 }, { 3, 4 } };
int arrayB[3][1] = { { 1 }, { 2 }, { 3 } };
int** arrayC;
int dimension1, dimension2;
if (case1)
{
    dimension1=2;
    dimension2=2;
    arrayC = new int*[dimension1];
    for (int i = 0; i < dimension1; i++)
        arrayC[i] = arrayA[i];
}
if (case2)
{
    dimension1=3;
    dimension2=1;       
    arrayC = new int*[dimension1];
    for (int i = 0; i < dimension1; i++)
        arrayC[i] = arrayB[i];
}
//work with arrayC
for (int i=0; i<dimension1; i++)
   arrayC=null;
delete[] arrayC;

暫無
暫無

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

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