gpt4 book ai didi

c++ - 是否可以使用负索引访问二维数组?

转载 作者:行者123 更新时间:2023-11-28 00:17:39 25 4
gpt4 key购买 nike

我正在尝试访问程序中的二维数组,而且我正在尝试使用负索引(它有助于我的思维步骤)。我想使用最简洁的语法来访问数组元素,即 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 (*p)[3] = (int (*)[3])((int *)&arr + 4);

首先。表达式 (int *)&arr + 4 形成指向与 &arr[1][1] 相同位置的指针。

然而,我选择了第一种形式,以避免可能的反对意见,即 &arr[1][1] 形成一个指针,该指针可能无法用于访问子数组范围之外的内容 到达[1]。在 C 中这是一个有效的反对意见,而在 C++ 中则不太清楚。 C++ 标准在这方面使用不同的措辞。无论如何,我通过在单个对象 arr 中使用偏移量来完全避免该主题。

之后,它被强制转换为指向 3 个整数的数组的指针。 (即与 &arr[0] 相同的类型)。

我认为使用它来访问 arr 中的任何 int 是可以的,尽管我还没有看到很多关于指针使用的讨论- to-array 当它与有效空间和无效空间重叠时。 (我将就此发布一个新问题...)

关于c++ - 是否可以使用负索引访问二维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29242409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com