考虑以下代码:
int a[25][80];
a[0][1234] = 56;
int* p = &a[0][0];
p[1234] = 56;
第二行是否调用未定义的行为?第四行呢?
最佳答案
这取决于解释。虽然数组的连续性要求在如何布局多维数组方面没有太多想象空间(这在之前已经指出),但请注意,当您在做 p[1234]
时您正在索引仅 80 列的第零行的第 1234 个元素。有些人将唯一有效的索引解释为 0..79(&p[80]
是一个特例)。
信息来自C FAQ这是 Usenet 在与 C 相关的问题上收集的智慧。(我认为 C 和 C++ 在这个问题上没有区别,这非常相关。)
关于c++ - 我可以将二维数组视为连续的一维数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66100693/