C ++它改变了变量的值因为..?

时间:2014-04-10 17:37:28

标签: c++ arrays console

这就是代码:

point [1][2][1] = 3;
cout << point[1][2][1] << endl;
point [1][3][0] = 4;
cout << point[1][2][1] << endl;

这就是控制台在运行应用程序时所说的内容:

3
4

如果我改为

point[1][3][0] = 5;

它说

3
5

如何删除这个恼人的错误?我不能那样继续。

1 个答案:

答案 0 :(得分:1)

当您的变量声明为

int point[100][100][1];

然后有效索引分别为0...990...990...0

因此,您对point[1][2][1]的访问权限非常不合适。根据您在范围之外的索引,您可以完全访问数组外部的区域,也可以访问数组的不同切片。

如果你真的想任意访问数组元素,那么我建议你丢弃三重下标符号并使用:

int point[m][n][p];
int* p = &point[0][0][0];
p[x*n*p + y*p + z]

现在您可以控制行主要与列主要访问,并且任何产生小于m*n*p的偏移的计算都是有效的。

请注意,在您的案例m=n=100p=1中,point[1][3][0]p[1*100*1 + 3*1 + 0] = p[103]point[1][2][1]p[1*100*1 + 2*1 + 1] = p[103]。所以两者都是同一个地方。