C语言中的变长数组 data[0]

来源:互联网 发布:js 二进制转字符串 编辑:程序博客网 时间:2024/06/05 18:48

本文装载自:http://www.cnblogs.com/Anker/p/3744127.html

主要是在看leveldb源码时, SkipList::Node里面的port::AtomicPointer next_[1]定义有点不解,因此上网搜到下面这篇讲解,做个笔记。


前言

今天在看代码中遇到一个结构中包含char data[0],第一次见到时感觉很奇怪,数组的长度怎么可能为0呢?于是上网搜了一下这样的用法,发现在linux内核中,结构体中经常用到data[0]。这样设计的目的是让数组长度可变,根据需要分配。方便操作,节省空间。


data[0]结构

经常遇到的结构形式如下

struct buffer{    int data_len;   //长度    char data[0];  //起始地址};

在这个结构中,data是一个数组名;但是该数组并没有元素;该数组的真是地址紧随结构体buffer之后,而这个地址就是结构体后面数据的地址、如果给这个结构体分配的内容大于这个结构体的实际大小,后面的部分就是这个data的内容。这种声明方法可以巧妙地实现C语言里的数组拓展。

0 0
原创粉丝点击