c语言中 0怎么用,C语言中0数组\柔性数组的使用详解

前言:

上次看到一篇面试分享,里面有个朋友说,面试官问了char[0] 相关问题,但是自己没有遇到过,就绕过了这个问题。

c19dee2f1c933ea7ebf2a5b4993d1837.png

我自己在这篇文章下面做了一些回复。

c语言中 0怎么用,C语言中0数组\柔性数组的使用详解_第1张图片

现在我想结合我自己的理解,解释一下这个 char[0] C语言柔性数组的问题。

0数组和柔性数组的介绍

0数组顾名思义,就是数组长度定义为0,我们一般知道数组长度定义至少为1才会给它分配实际的空间,而定义了0的数组是没有任何空间,但是如果像上面的结构体一样在最后一个成员定义为零数组,虽然零数组没有分配的空间,但是它可以当作一个偏移量,因为数组名这个符号本身代表了一个不可修改的地址常量。柔性数组也叫可伸缩性数组,而0数组是一种柔性数组。

因为在早期没引入0长度数组的时候, 大家是通过定长数组和指针的方式来解决的, 但是定长数组定义了一个足够大的缓冲区, 这样使用方便, 但是每次都造成空间的浪费指针的方式, 要求程序员在释放空间是必须进行多次的free操作, 而我们在使用的过程中往往在函数中返回了指向缓冲区的指针, 我们并不能保证每个人都理解并遵从我们的释放方式所以 GNU 就对其进行了0长度数组的扩展. 当使用data[0]的

你可能感兴趣的:(c语言中,0怎么用)