请考虑以下代码:
int a[25][80];
a[0][1234] = 56;
int* p = &a[0][0];
p[1234] = 56;
Run Code Online (Sandbox Code Playgroud)
第二行是否调用未定义的行为?第四行怎么样?
c++ arrays pointers multidimensional-array undefined-behavior
首先,如果我犯了任何语法错误,对不起我的英语......
我的问题是,当我们有一个二维数组时,如果我是对的,从计算机和C/C++的角度来看,它只是一个长的一维数组,索引只是帮助编译器映射到具体的地址.
这段代码工作在Visual C++,但是我想知道,这个代码是否是便携式和符合 该 标准(C++ 98),不会造成对其他架构和/或操作系统的惊喜:
int arr[][3] = { 1, 5, 3, 7, 5, 2, 7, 8, 9 };
const int ARR_NUM = sizeof(arr) / sizeof(int);
int* ptr = reinterpret_cast<int*>(arr); // NOT: int(*)[][3] !!!
for (int i = 0; i < ARR_NUM; ++i) {
cout << ptr[i] << endl;
}
Run Code Online (Sandbox Code Playgroud)