struct关键字---C语言深度剖析读书笔记9
2013-03-19 16:12
190 查看
1.空结构体
所谓空结构体,即结构提内没有元素。 在GCC中,空结构体的大小为0;在VC2010中,则不允许出现空结构体。
2.结构体元素的内存对齐
系统在为结构体分配内存的时候,需要考虑内存对齐的问题
3.弹性数组
结构体的最后一个元素允许是未知大小的数组,即可变长的弹性数组(flexible array)。注意,弹性数组只能是结构体的最后一个元素;同时,在使用sizeof获得结构体大小的时候,弹性数组是不计入的。
所谓空结构体,即结构提内没有元素。 在GCC中,空结构体的大小为0;在VC2010中,则不允许出现空结构体。
struct student { } stu; printf("%d\n",sizeof(stu)); //GCC中打印结果为:0
2.结构体元素的内存对齐
系统在为结构体分配内存的时候,需要考虑内存对齐的问题
int main(void) { struct student { char c; int i; }stu; printf("size of is %d\n",sizeof(stu)); //打印结果:8.而不是1+4 }
3.弹性数组
结构体的最后一个元素允许是未知大小的数组,即可变长的弹性数组(flexible array)。注意,弹性数组只能是结构体的最后一个元素;同时,在使用sizeof获得结构体大小的时候,弹性数组是不计入的。
int main(void) { int i; int * iarr; struct FlexArrTest1 { char c; int iarr[0];//定义弹性数组的第一种方式:指定数组长度为0 }fat1; struct FlexArrTest2 { char c; int iarr[];//定义弹性数组的第二种方式:不指定数组长度 }fat2; //注意:弹性数组必须是结构体中的最后一个元素。 struct FlexArrTest1 *pFat1=(struct FlexArrTest1 *)malloc(sizeof(struct FlexArrTest1)+100*sizeof(int)); printf("%d\n",sizeof(*pFat1));//sizeof返回的结构体大小,不包括弹性数组。 // VC里打印结果为4。(这里为4而不是1,是因为内存对齐) iarr=pFat1->iarr; for(i=0;i<100;i++) pFat1->iarr[i]=i; free(pFat1); //free一个pFat1指针,由其所指的对象申请的内存空间也会被回收。 printf("%d\n",iarr[0]); //会打印出一个不正常的数.这是因为:stu中的cc数组空间,已经被回收 return 0; }
相关文章推荐
- C语言深度剖析--读书笔记2_static关键字
- C语言深度剖析--读书笔记4_signed/unsigned关键字
- 读书笔记:c语言深度剖析之关键字
- C语言深度剖析--读书笔记7_const关键字
- C语言深度剖析--读书笔记_void 关键字
- C语言深度剖析--读书笔记6_return关键字
- 6.读c语言深度剖析 -- 第一章 关键字(32个)
- c语言深度剖析之—关键字
- c语言深度剖析 -- 读书笔记
- C语言深度剖析--读书笔记3_sizeof
- C语言左值与右值的区别(C语言深度剖析读书笔记一)
- C语言深度剖析学习心得之关键字
- C语言深度剖析读书笔记
- c语言深度剖析读书笔记
- 读c语言深度剖析 -- 简谈Struct union(大端小端)
- 读书笔记之:C语言深度剖析
- C语言深度剖析——读书笔记
- 读书笔记之:C语言深度剖析
- Mohican_11/18 C语言深度剖析 - 关键字
- 读书笔记之:C语言深度剖析