如何构造辅助阵列以进行投射“;int[][][]”;至;int***";? 我是C++中的新手,只用于学习目的。p>
我刚刚了解了如何使用辅助如何构造辅助阵列以进行投射“;int[][][]”;至;int***";? 我是C++中的新手,只用于学习目的。p>,c++,C++,我刚刚了解了如何使用辅助int*aux[]将int输入[]][]转换为int**输出[/code>,如下所示 int TwoD() { int input[][3] = { {1,2,3},{4,5,6} }; int* aux[2]; aux[0] = input[0];// array of int ---> pointer to int aux[1] = input[1];// array of int ---> pointer to int
int*aux[]
将int输入[]][]
转换为int**输出[/code>,如下所示
int TwoD()
{
int input[][3] = { {1,2,3},{4,5,6} };
int* aux[2];
aux[0] = input[0];// array of int ---> pointer to int
aux[1] = input[1];// array of int ---> pointer to int
int** output = aux;// array of int* ---> pointer to int*
for (int i = 0; i < 2; i++)
for (int j = 0; j < 3; j++)
cout << output[i][j] << endl;
}
void ThreeD()
{
int input[2][3][4] =
{
{
{1,2,3,4},
{5,6,7,8},
{9,10,11,12}
},
{
{13,14,15,16},
{17,18,19,20},
{21,22,23,24}
}
};
//int(*output)[3][4] = input;
int** aux[2];
aux[0][0] = input[0][0];
aux[0][1] = input[0][1];
aux[0][2] = input[0][2];
aux[1][0] = input[1][0];
aux[1][1] = input[1][1];
aux[1][2] = input[1][2];
int*** output = aux;
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
for (int k = 0; k < 4; k++)
cout << output[i][j][k] << " ";
cout << endl;
}
cout << endl;
}
}
inttwod()
{
int输入[][3]={{1,2,3},{4,5,6};
int*aux[2];
aux[0]=输入[0];//int的数组-->指向int的指针
aux[1]=输入[1];//int的数组-->指向int的指针
int**output=aux;//int*-->指向int的指针数组*
对于(int i=0;i<2;i++)
对于(int j=0;j<3;j++)
你需要另一层指针
int input[2][3][4] =
{
{
{1,2,3,4},
{5,6,7,8},
{9,10,11,12}
},
{
{13,14,15,16},
{17,18,19,20},
{21,22,23,24}
}
};
int* aux1[2][3] =
{
{ input[0][0], input[0][1], input[0][2] },
{ input[1][0], input[1][1], input[1][2] },
};
int** aux2[2] = {aux1[0], aux1[1]};
int*** output = aux2;
因为aux
没有指向任何东西,aux[0]
是未定义的行为。为什么您对将数组转换为int***
感兴趣?int***
是如此明显的代码气味,一种糟糕代码的迹象,以至于它成为了一个笑话。它使您成为一个..多维数组退化为指向数组的指针,而不是指向指针的指针。一般来说,数组传递起来很烦人。这是一个问题不要使用它们。我更喜欢像std::vector
和std::array
@GodMustBeCrazy-Heh这样的库容器。我克制住了这种冲动,不想说当我能够做出一个正确的答案来解释发生了什么以及如何避免它时,有人会发布一个更简洁的。很高兴看到我是对的。我喜欢你的解释。这个问题非常清楚和直接。@GodMustBeCrazy,很高兴听到它有用:)对不起,我有一个关于函数指针的问题。如果我们传递一个回调bool isOdd(int x){return x%2==1;}
作为另一个带有签名的函数的参数PrintList(bool(*f)(int),…其他参数…)
,这是正确的调用?PrintList(isOdd,…);
或PrintList(&isOdd,…);
?@GodMustBeCrazy,两者都是正确的。非成员函数在这方面是特殊的。