繁体   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