我可以使用指针访问多维数组吗?

时间:2011-12-08 09:12:42

标签: c++ arrays pointers multidimensional-array

this引用,在C中,似乎以下行为未定义。

int my_array[100][50];
int *p = my_array[0];
p[50]; // UB

C ++ 03或C ++ 11中是否有引用证实了这一点?

2 个答案:

答案 0 :(得分:6)

在+运算符的描述中是。您可能无法在C中取消引用该指针,因为它超过了第一个子数组的结束指针。在C ++中,这当前是合法的,因为指针指向有效整数(关系点在第3节中的某处定义)。但是,在这两个标准中,添加超过50个会产生未定义的行为。

最近,DR向c ++委员会发送了关于解除引用这种“有效的无效”指针的规则可能被取消引用的规则,所以我不会依赖它。

答案 1 :(得分:-1)

int my_array[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
for(i=0;i<3*3;i++)
{
    printf("%d,",*(*my_array+i));
}

输出是 1,2,3,4,5,6,7,8,9,

我认为你可以这样做。