9.フレキシブル配列

874 ワード

C 99では、構造の最後の要素が未知のサイズの配列であることを許可し、これを「フレキシブル配列」メンバーと呼ぶ.
  :
typedef struct st_type
{
int i;
int a[0];//      
}type_a;
                :
typedef struct st_type
{
int i;
int a[];//      
}type_a;

フレキシブル配列の特徴:構造内のフレキシブル配列メンバーの前に少なくとも1つの他のメンバーが必要です.sizeofが返すこの構造サイズには、フレキシブル配列のメモリは含まれません.フレキシブル配列メンバーを含む構造はmalloc()関数でメモリの動的割り当てを行い、フレキシブル配列の予想されるサイズに適応するために、割り当てられたメモリは構造のサイズよりも大きくなければならない.
//    
#include 
#include 
#include 
//code1
typedef struct st_type
{
	int i;
	int a[0];//      
}type_a;

int main()
{
	printf("%d
", sizeof(type_a));// 4 int i = 0; type_a* p = (type_a*)malloc(sizeof(type_a) + 100 * sizeof(int)); // assert(p!= NULL); p->i = 100; for (i = 0; i < 100; i++) { p->a[i] = i; } free(p); return 0; }