从this引用,在C中,似乎以下行为未定义。
int my_array[100][50];
int *p = my_array[0];
p[50]; // UB
C ++ 03或C ++ 11中是否有引用证实了这一点?
答案 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,
我认为你可以这样做。