看redis代码的时候发现一个特殊的数组, 结构体中类似于char tt[] 没有大小的数组, 一般来说c语言是静止使用不固定大小的数组的, 所以就查了查发现这个东东叫柔性数组, 是c99之后加入的新特新; 故本着强烈的求知欲, 学习了下; 以下是整理学习的一些总结. 讲述柔性数组成员之前,首先要介 ...
分类:
编程语言 时间:
2016-08-08 14:09:52
阅读次数:
137
空结构体:对于空结构体,就是只有结构体这个模子,但里面却没有元素的结构体。
例:
typedef struct student
{
}std;
这种空结构体的模子占一个字节,sizeof(std)=1。
柔性数组:
结构体中最后一个元素可以是一个大小未知的数组,称作柔性数组成员,规定柔性数组前面至少有一个元素.
typedef struc...
分类:
其他好文 时间:
2016-05-18 19:57:22
阅读次数:
273
首先,我们来看一个题typedefstructlist_t{
structlist_t*next;
structlist_t*prev;
chardata[0];
}list_t;此时,你知道32位系统中,sizeof(list_t)的值为多少么?这时,你会告诉我chardata[0]在C和C++中是不被允许的,因为看起来毫无意义。然而,此处为何可以呢?在讲述柔性数..
分类:
编程语言 时间:
2016-05-07 01:14:59
阅读次数:
193
空结构体:对于空结构体,就是只有结构体这个模子,但里面却没有元素的结构体。例:typedefstructstudent{}std;这种空结构体的模子占一个字节,sizeof(std)=1。柔性数组:结构体中最后一个元素可以是一个大小未知的数组,称作柔性数组成员,规定柔性数组前面至少有一个元素.ty..
分类:
其他好文 时间:
2016-04-20 23:55:26
阅读次数:
305
柔性数组typedef struct node{ int len; int a[];//或者写成int a[0];}node; 以上结构体中a就是所谓的柔性数组,柔性数组在C99标准中已经加入。 柔性数组即大小不确定的数组,放在结构体最后。 首先需要知道的是,sizeof(node)=4;不论是否给...
分类:
编程语言 时间:
2016-01-17 12:14:16
阅读次数:
153
结构体中最后一个成员为[0]长度数组的用法:这是个广泛使用的常见技巧,常用来构成缓冲区。比起指针,用空数组有这样的优势:(1)、不需要初始化,数组名直接就是所在的偏移;(2)、不占任何空间,指针需要占用int长度空间,空数组不占任何空间。“这个数组不占用任何内存”,意味着这样的结构节省空间;“该数组...
分类:
编程语言 时间:
2016-01-06 23:46:09
阅读次数:
318
在标准C和C++中0长数组如charArray[0]是不允许使用的,因为这从语义逻辑上看,是完全没有意义的。但是,GUN中却允许使用,而且,很多时候,应用在了变长结构体中,如:StructPacket{Int state;Int len;Char cData[0];//这里的0长结构体就为变长结构体...
分类:
编程语言 时间:
2015-12-10 12:54:14
阅读次数:
210
1、关于数组的大小:在C语言中声明一个数组时需要指定其大小(柔性数组除外),数组的大小有两种指定的方式:a、显式指定数组大小eg:int a[5]={1,2};即在声明数组的时候,就在数组的长度方括号[]内填写数组的长度,这种方式就是显式的指定数组大小的方式。b、隐式指定数组大小eg:int b[]...
分类:
编程语言 时间:
2015-11-26 19:12:52
阅读次数:
149
最近在看《深度探索C++对象模型》,对于Struct的用法中,发现有一些地方值得我们借鉴的地方,特此和大家分享一下,此间内容包含了网上搜集的一些资料,同时感谢提供这些信息的作者。原文如下: 例如,把单一元素的数组放在一个struct的尾端,于是每个struct objects可以拥有可变大小的数组....
分类:
编程语言 时间:
2015-11-07 09:05:33
阅读次数:
229
1、结构体:1.1、思考题:空结构体占用多大内存空间?ANS:不同的编译器,这个结果是不定的。在GCC下,空结构体占用0个字节的空间。在G++编译器下,空结构体占用1个字节的空间。1.2、一个新的概念----柔性数组柔性数组:数组大小待定的数组。C语言中结构体的最后一个元素可以为一个大小未知的数组。...
分类:
其他好文 时间:
2015-10-20 17:53:54
阅读次数:
131