C++ 指向二维数组的指针

C++ 指向二维数组的指针,c++,arrays,pointers,multidimensional-array,C++,Arrays,Pointers,Multidimensional Array,如何让指针分配二维数组 下面的代码不起作用 float a1[2][2] = { {0,1},{2,3}}; float a2[3][2] = { {0,1},{2,3},{4,5}}; float a3[4][2] = { {0,1},{2,3},{4,5},{6,7}}; float** b = (float**)a1; //float** b = (float**)a2; //float** b = (float**)a3; cout << b[0][0] <<

如何让指针分配二维数组

下面的代码不起作用

float a1[2][2] = { {0,1},{2,3}};
float a2[3][2] = { {0,1},{2,3},{4,5}};
float a3[4][2] = { {0,1},{2,3},{4,5},{6,7}};

float** b = (float**)a1;

//float** b = (float**)a2;
//float** b = (float**)a3;

cout << b[0][0] << b[0][1] <<  b[1][0] <<  b[1][1] << endl;
float a1[2][2]={{0,1},{2,3};
浮点a2[3][2]={{0,1},{2,3},{4,5};
浮点a3[4][2]={{0,1}、{2,3}、{4,5}、{6,7};
浮动**b=(浮动**)a1;
//浮动**b=(浮动**)a2;
//浮动**b=(浮动**)a3;

在C++中,你这样做的方式不是合法的。你需要有一组指针。

你做这件事的方式在C++中不是合法的。您需要有一个指针数组。

这里的问题是编译器不知道b的维度。将a1强制转换为浮点**时,信息将丢失。转换本身仍然有效,但不能使用b[][]引用数组。

这里的问题是编译器不知道b的维度。将a1强制转换为浮点**时,信息将丢失。转换本身仍然有效,但不能使用b[][]引用数组。

a1
不能转换为
float**
。所以你所做的是违法的,不会产生预期的结果

试试这个:

float (*b)[2] = a1;
cout << b[0][0] << b[0][1] <<  b[1][0] <<  b[1][1] << endl;
float(*b)[2]=a1;

cout
a1
不能转换为
float**
。所以你所做的是违法的,不会产生预期的结果

试试这个:

float (*b)[2] = a1;
cout << b[0][0] << b[0][1] <<  b[1][0] <<  b[1][1] << endl;
float(*b)[2]=a1;

cout您可以明确地执行此操作:

float a1[2][2] = { {0,1},{2,3}};
float* fp[2] = { a1[0], a1[1] };
// Or
float (*fp)[2] = a1;

您可以明确地执行此操作:

float a1[2][2] = { {0,1},{2,3}};
float* fp[2] = { a1[0], a1[1] };
// Or
float (*fp)[2] = a1;

尝试将b直接指定为等于a1,这意味着指针b指向的内存位置与指针a1指向的内存位置相同,它们现在具有相同的内存引用,您应该能够遍历数组。

尝试将b直接指定为等于a1,这意味着指针b指向的内存位置与指针a1指向的内存位置相同,它们现在具有相同的内存引用,您应该能够遍历数组。

如果所有数组都具有最终维度2(如示例中所示),那么您可以这样做

float (*b)[2] = a1; // Or a2 or a3

如果所有数组都有最终维度2(如示例中所示),那么您可以这样做

float (*b)[2] = a1; // Or a2 or a3

+1我相信这就是为什么不能在浮点**上使用数组索引的原因。+1我相信这就是为什么不能在浮点**上使用数组索引的原因。