这就是代码:
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
如何删除这个恼人的错误?我不能那样继续。
答案 0 :(得分:1)
当您的变量声明为
时int point[100][100][1];
然后有效索引分别为0...99
,0...99
,0...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=100
和p=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]
。所以两者都是同一个地方。