如何理解c语言结构体中定义长度为空的数组

2025-04-14 11:02:28

1、c语言中定义数组时,需要指定数组容量大小。通常我们都是指定大于0的数,但其实容量的要求是大于等于0。如果小于0,编译时候会报错。程序示例如下:

如何理解c语言结构体中定义长度为空的数组
如何理解c语言结构体中定义长度为空的数组

2、如果容量定义为0,那么数组中实际占用内存为多少呢?由示例可知,容量为0的数组,占用内存大小为0。

如何理解c语言结构体中定义长度为空的数组

3、数盲褓梆尺组容量为0,那么这种数组有什么作用呢?对于单独的数组定义,比如int empty[0]; empty将只能作为一个标识符,在程序中实在不知道能怎么使用它。但是作为标识符,用在结构体定义末尾,则会起到真正类似数组作用。我们看redis开源代码中有个这种例子。

如何理解c语言结构体中定义长度为空的数组

4、我们也定义一个类似的结构体用来测试,输入结构体大小,空数组仍然是不占用内存空间的。示例如下:

如何理解c语言结构体中定义长度为空的数组

5、如此定义结构体,通常的用法是,结构体中的数组为可变数组。malloc申请的内存为一段连续的空间,所以如果申阄唰辔腽请比结构体大的空间,通过数组符号也可以继续访问。继续我们的示例程序,我们定义了一个可变数组以及添加和获取数据的方法。

如何理解c语言结构体中定义长度为空的数组

6、继续示例程序,初始化结构体时传入可变容量大小,从而实现可变数组。并且我们测试添加数据,获取数据方法,程序运行正常。

如何理解c语言结构体中定义长度为空的数组
如何理解c语言结构体中定义长度为空的数组
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢