我想知道C++标准是否保证多维数组(非动态分配)被展开为完全相同大小的一维数组。例如,如果我有:
char x[100];
char y[10][10];
这两者是否等价?我知道大多数编译器会展开
y
,但这是否确实是有保证的呢?在阅读C++标准的11.3.4数组章节时,我并没有找到任何保证这一点的地方。C++标准保证
y[i]
紧随在y[i-1]
后面。由于y[i-1]
长10个字符,那么从逻辑上讲,y[i]
应该在内存中比y[i-1]
晚10个字符; 但是,一个编译器是否会填充y[i-1]
与额外的字符以使y[i]
对齐呢?
y[0][10]
将会是未定义行为。 - 1201ProgramAlarmy[i-1]
和y[i]
之间没有填充,但如果y[i-1]
占用sizeof(char[10])+2
字节,则仍然不存在附加的数组元素之间的填充,这符合标准规范。 如果我有char x[5]; int y[5]
,那么编译器可以在第一个数组后添加填充,那么为什么它不能对多维数组进行相同的操作呢? - ChrisMM