c++ - 我可以将二维数组视为连续的一维数组吗?

标签 c++ arrays pointers multidimensional-array undefined-behavior

考虑以下代码:

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/

相关文章:

c++ - 将 C 字符串和 fortran 字符串混合在一个文件中

c++ - 井字游戏

c++ - GetProcessAffinityMask 给出了错误的值

c++ - 在 Win32 上处理 CTRL+C

c - 使用 fork 和 pipe 在数组中搜索最大值

javascript - 在 C# 中定义混合类型的数组

c# - C# Endian 敏感吗?

pointers - Go中接口(interface)类型的间接

Javascript:在二维矩阵(数组)中查找矩形的 Angular 位置

在 vb.net 中调用 C 指针