C中0长度数组的意义是什么?

Utk*_*tav 8 c arrays

#include <stdio.h>
int main()
{
    int a[0],b[4][0];
    printf("%d %d ",sizeof(a),sizeof(b));
}
//output
0 0
Run Code Online (Sandbox Code Playgroud)

有什么意义a[0],为什么还允许大小为0的2d数组?

Ker*_* SB 9

C和C++都不允许零长度的数组,所以你的程序是不正确的.

(例如C++ 11,8.3.4/1:"[数组大小]应大于零".)

(作为一个基本原理:一个零长度的数组将是棘手的,并且混淆与每个对象具有唯一地址的要求相协调.)

正如@sidyll指出的那样,零长度数组可用作GCC中的扩展.

  • @ user1044137:有许多很多方法可以编写格式错误的C和C++程序,并且没有接收任何诊断信息.就此而言,我的GCC说"警告:ISO C++禁止零大小的阵列".您应该始终启用所有警告. (4认同)