博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言中的变长数组 data[0]
阅读量:4166 次
发布时间:2019-05-26

本文共 451 字,大约阅读时间需要 1 分钟。

本文装载自:

主要是在看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语言里的数组拓展。

转载地址:http://fsqxi.baihongyu.com/

你可能感兴趣的文章
Wallpaper (19)
查看>>
Wallpaper (20)
查看>>
c语言结构体引用元素“.”与“->”辨析
查看>>
Wallpaper (21)
查看>>
Wallpaper (22)
查看>>
Wallpaper (23)
查看>>
Wallpaper (24)
查看>>
Wallpaper (25)
查看>>
c语言指针计算辨析
查看>>
c语言指针比较辨析
查看>>
Wallpaper (26)
查看>>
Wallpaper (27)
查看>>
Wallpaper (28)
查看>>
Wallpaper (29)
查看>>
c语言auto与register辨析
查看>>
Wallpaper (30)
查看>>
Wallpaper (31)
查看>>
c语言声明对象auto/extern/static辨析
查看>>
Wallpaper (34)
查看>>
Wallpaper (35)
查看>>