-
柔性数组
- 柔性数组即数组大小待定的数组 - C语言中可以由结构体产生柔性数组 - C语言中结构体的最后一个元素可以是大小未知的数组
struct Flexible_Array
{
int len;
int array[];
}
Flexible_Array中的array仅仅是一个待使用的标识符,不占用存储空间
代码示例:
#include<stdio.h>
#include<malloc.h>
struct Flexible_Array
{
int len;
int array[];
};
struct Flexible_Array* Create_Flexible_Array(int size)
{
struct Flexible_Array* pointer = NULL;
if( size > 0 )
{
pointer = (struct Flexible_Array*)malloc(sizeof(struct Flexible_Array) + sizeof(int) * size );
pointer->len = size;
}
return pointer;
}
void Delete_Flexible_Array(struct Flexible_Array* fa)
{
free(fa);
}
void Func(struct Flexible_Array* fa)
{
int i = 0;
if( fa != NULL)
{
for( i = 0; i < fa->len; i++ )
{
fa->array[i] = i;
}
}
}
int main()
{
int i = 0;
struct Flexible_Array* fa = Create_Flexible_Array(10);
Func(fa);
for( i = 0; i < fa->len; i++)
{
printf("array[%d] = %d\n",i,fa->array[i]);
}
Delete_Flexible_Array(fa);
return 0;
}
编译结果:
-
C语言中的union
- C语言中的union在语法上与struct相似 - union只分配最大的空间,所有成员共享这个空间 - union的使用受大小端的影响
代码示例:
#include<stdio.h>
struct A
{
int a;
int b;
int c;
int d;
};
union B
{
int a;
double b;
char c;
};
int main()
{
printf("sizeof(struct A) = %d\n",sizeof(struct A));
printf("sizeof(union B) = %d\n",sizeof(union B));
return 0;
}
编译结果:
代码示例:(功能:判断系统大小端)
#include <stdio.h>
void System_Check()
{
union SC
{
int i;
char c;
};
union SC sc;
sc.i = 1;
if( 1 == sc.c)
{
printf("This is Little_Endian\n");
}
else
{
printf("This is Big_Endian\n");
}
}
int main()
{
System_Check();
return 0;
}