使用单个值引用二维数组中的元素

时间:2011-03-02 16:56:25

标签: c++

我可能遗漏了一些基本的东西,但我无法找到解决以下问题的方法。 我有一些浮点元素的二维数组,我试图找到一种方法,只能使用一个值来引用它们。 例如:

float test[5][50];
test[3][25] = 34.67;
cout << test[3][25] << endl;
int id = 25;
cout << *test[id*5+3] << endl;

我希望从两个cout得到相同的结果。相反,我的输出看起来像这样:

34.67
Segmentation fault

我做错了什么?

谢谢!

5 个答案:

答案 0 :(得分:5)

如果没有测试,我认为这样的事情可能有用。请注意,从左维度到右维度,C ++数组是主要的 - >次要的。

float test[5][50];
test[3][25] = 34.67;
cout << test[3][25] << endl;
int id = 25;
float* test2 = &test[0][0]
cout << test2[(3 * 50) + id] << endl;

答案 1 :(得分:2)

崩溃是因为您正在尝试将元素的内容作为内存地址读取

*test[id*5+3]表示int address = test[id*5+3];,然后在地址读取内存 如果该地址为0或您不拥有的内存,那么它将崩溃。

答案 2 :(得分:2)

测试是float[][],包含5个元素(每个元素都是float[],包含50个元素),您指的是test[128]。因此,seg fault。你需要使用整数除法和mod:

从单个索引转换为下标
cout << test[id/50][id%50] << endl;

您应assert(id/50<5);确保索引在范围内。

答案 3 :(得分:1)

使用单个参考访问二维位图(图像)通常很有用。

使用:

int image2D[dim2][dim1];
int *image1D = &image2D[0][0];

现在

image2D[i][j] == image1d[i*dim1+j]

答案 4 :(得分:-1)

我同意第一条评论,你真的不应该这样做,但无论如何我都会回答。

我想如果你尝试:

cout << test[id*5+3] << endl;

它应该有用。无需使用*。

取消引用