【发布时间】:2015-03-24 20:37:47
【问题描述】:
我正在尝试访问程序中的二维数组,并且我正在尝试使用负索引(它有助于我的心理步骤)。我想使用最简洁的语法来访问数组元素,即a[i][j]。
但是,当我运行程序时,出现分段错误。
#include <iostream>
int main (void)
{
int i,j;
int arr[3][3];
int ** p;
for( i=0; i<3; i++)
{
for(j=0; j<3; j++)
{
arr[i][j] = i+j;
}
}
p = (int **)&(arr[1][1]);
for( i=-1; i<2; i++)
{
for(j=-1; j<2; j++)
{
std::cout << p[i][j] << std::endl;
}
}
return 0;
}
我不想使用p[i*something + j] 之类的东西来访问数组元素。有可能吗?
【问题讨论】:
-
现在你有一个更大的问题。
int**和int[x][y]不等效。我会先担心这个。您收到的错误并因此被那个可怕的演员掩盖并不是为了给您带来不便。它试图告诉你一些事情。 -
@WhozCraig
p的正确类型应该是什么,这样它才能发挥作用?程序编译成功。 -
你的意思是
int (*p)[3] = (int (*)[3])((int *)&arr + 4);。之后我认为进行索引是合法的,尽管不完全确定 -
您总是可以编写自己的二维向量类,它使用负索引。但我更愿意建议您习惯基于 0 的索引。
-
@TheParamagneticCroissant
&arr + 4远远超出了数组的末端
标签: c++ multidimensional-array