-------------------------------------资源来源于网络,仅供自学使用,如有侵权,联系我必删.
第一:
有结构体产生柔性数组
柔性数组即数组大小待定的数组
C 语言中结构体的最后一个元素可以是大小未知的数组
C 语言中可以由结构体产生柔性数组
#include <stdio.h>
#include <malloc.h>
typedef struct _soft_array
{
int len; //4个字节
int array[]; //0字节
}SoftArray;
int main()
{
int i = 0;
//柔性数组int array[] 空间 sizeof(int) * 10
SoftArray* sa = (SoftArray*)malloc(sizeof(SoftArray) + sizeof(int) * 10);
sa->len = 10;
for(i=0; i<sa->len; i++)
{
sa->array[i] = i + 1;
}
for(i=0; i<sa->len; i++)
{
printf("%d\n", sa->array[i]);
}
free(sa);
return 0;
}
第二:
存储斐波拉次数列
#include <stdio.h>
#include <malloc.h>
//定义柔性数组结构
typedef struct _soft_array
{
int len;
int array[];
}SoftArray;
//创建一个柔性数组
SoftArray* create_soft_array(int size)
{
SoftArray* ret = NULL;
if( size > 0 )
{
//sizeof(*ret)是 len 申请的空间大小, sizeof(*(ret->array)) 是 array数组里面第一个元素的类型大小
ret = (SoftArray*)malloc(sizeof(*ret) + sizeof(*(ret->array)) * size);
ret->len = size;//柔性数组大小写进len里面
}
return ret;
}
//生成斐波拉契数列
void fac(SoftArray* sa)
{
int i = 0;
if( NULL != sa )
{
if( 1 == sa->len )
{
sa->array[0] = 1;
}
else
{
sa->array[0] = 1;
sa->array[1] = 1;
for(i=2; i<sa->len; i++)
{
sa->array[i] = sa->array[i-1] + sa->array[i-2];
}
}
}
}
//释放柔性数组
void delete_soft_array(SoftArray* sa)
{
free(sa);
}
int main()
{
int i = 0;
SoftArray* sa = create_soft_array(10);
fac(sa);
for(i=0; i<sa->len; i++)
{
printf("%d\n", sa->array[i]);
}
delete_soft_array(sa);
return 0;
}
第三:
union 和struct的区别
struct 中的每个域在内存中都独立分配空间
union 只分配最大域的空间 , 所有域共享这个空间
struct A
{
int a;
int b;
int c;
};
union B
{
int a;
int b;
int c;
};
int main()
{
printf("%d\n",sizeof(struct A)); //12
printf("%d\n",sizeof(union B)); //4
return 0;
}