【发布时间】:2012-05-16 12:26:02
【问题描述】:
首先,如果我犯了任何语法错误等,对不起我的英语......
我的问题是,当我们有一个二维数组时,如果我是对的,从计算机和 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;
}
【问题讨论】:
-
我切换了标签,因为 [多维] 的标签 wiki 说要改用 [多维数组]。我建议将 [arrays] 替换为 [language-lawyer] 可能会吸引合适的人。
-
我会使用 int* p= &arr[0][0] 而不是重新解释演员表
-
@user396672,
int * p = arr[0];和int * p = &arr[0][0];一样,但肯定更清晰。 -
@Griwes:当然是一样的,但是 &arr[0][0] 代表“第一个 int 的地址”,不需要计算 indirecions :)口味问题...
-
@user396672,那你很奇怪(没有冒犯):P
标签: c++ arrays memory multidimensional-array portability