1.讨论struct
C语言中的struct可以看作变量的集合
struct的问题:空结构体占用多大内存?
编程可知
在GCC编译器中,空结构体占用的大小大小为0,不占用任何内存。
在BCC编译器中,不允许空结构体存在,会报错。
VC10.0也报错,要求结构体至少有一个成员变量。
但是在实际运用中我们也不会去定义一个空结构体,我们简单了解一下即可。
2.结构体与柔性数组
- 柔性数组即数组大小待定的数组
- C语言中可以由结构体产生柔性数组
- C语言中结构体的最后一个元素可以是大小未知的数组
我们看下面例子
#include <stdio.h>
struct SoftArray
{
int len;
int array[];//柔性数组
};
int main()
{
printf("%d\r\n",sizeof(struct SoftArray));
return 0;
}
运行输出的结果为4。说明了:
SoftArray中的array仅是一个待使用的标识符,不占用存储空间。
虽然没有在结构体中定义柔性数组的内存大小,但是我们可以使用malloc函数来申请所需要的空间。
下面来实例分析一下
#include <stdio.h>
#include <malloc.h>
//定义了一个柔性数组结构体
struct SoftArray
{
int len;
int array[];
};
//用于生成一个柔性数组