柔性数组既数组大小待定的数组, C语言中结构体的最后一个元素可以是大小未知的数组,也就是所谓的0长度,所以我们可以用结构体来创建柔性数组。
这个未知数组是不占用长度的。
应用:比如网络通信中发送不定长的数据包
#include<windows.h>
#include<stdio.h>
#include<malloc.h>
typedef struct _SoftArray {
int len;
int array[];
}SoftArray;
int main()
{
int len = 10, i = 0;
SoftArray *p = (SoftArray*)malloc(sizeof(SoftArray) + sizeof(int)*len);
p->len = len;
for (i = 0; i < p->len; i++)
{
p->array[i] = i + 1;
}
for (i = 0; i < p->len; i++)
{
printf("%d\n", p->array[i]);
}
free(p);
system("pause");
return 0;
}
利用在堆上申请空间,对于结构体实例化成员进行分配。
来看内存空间分配
#include<windows.h>
#include<stdio.h>
#include<malloc.h>
typedef struct _SoftArray {
int len;
int array[];
}SoftArray;
int main()
{
int len = 10, i = 0;
SoftArray *p = (SoftArray*)malloc(sizeof(SoftArray) + sizeof(int)*len);
p->len = len;
for (i = 0; i < p->len; i++)
{
p->array[i] = i + 1;
}
for (i = 0; i < p->len; i++)
{
printf("%d\n", p->array[i]);
}
for (int i = 0; i < 11; ++i)
{
printf("%d", p[i]);
}
free(p);
system("pause");
return 0;
}