2016-03-18 181 views
-1

我想一个数组赋值给一个指针,所以我可以用它如何将一个二维数组分配给一个指针?

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 

我能做什么?

编辑:找到了另一种解决方案。参见回答

+4

什么是您的实际问题?你想实现什么? – user463035818

+2

这两个阵列具有完全不同的尺寸。如果总共有4个或3个元素,你将如何“使用arrayC”? – user463035818

+0

我会将尺寸存储在另一个变量 – rkgghz

回答

0

我发现与阵列的动态初始化的解决方案:

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; 
2

int **是一个根本不同的因此不兼容的数据类型比2D阵列int [][]

唯一的简单的方法做你正试图在你上面的例子那种事情就是击败你的二维数组一维数组:

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; 

很明显,那么你就需要做明确的数组索引计算你自己。

1

你不能指定(正确的术语是转换)2D数组到指针的指针。原因是一维数组到一个指针(到第一个元素)的转换不适用于更高维度。

你可以做的是声明一个指向两个int数组的指针。这种情况下的转换是有效的。

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

的事情来实现,不过,是*arrayBarrayA第一个元素的地址。在这个例子中,该元素是使用{1,2}初始化的数组。

编辑原始问题后编辑以添加以下内容以询问不同的问题。

上面的确需要维度的一致性,所以在维度不匹配的(现在编辑的例子)中不起作用。这是需要匹配的最后一个(最右侧)维度。

如果您想要维度不匹配,除了将数组展平为单维外,没有其他解决方案。

相关问题