一个结构体中未定义的数组声明
为什么C允许这个:
typedef struct s { int arr[]; } s; 数组arr没有指定大小? 解决方法
这是称为灵活阵列的C99功能,其主要特点是允许
answer to another question on flexible array members和07在这个
answer to another question on flexible array members中列出了使用灵活数组超过指针的好处.第6.7.2.1节结构和联盟规范第16段中的
draft C99 standard说:
所以如果你有一个s *,那么除了结构体所需的空间之外,你还可以为数组分配空间,通常你会在结构中有其他成员: s *s1 = malloc( sizeof(struct s) + n*sizeof(int) ) ; 该标准草案在第17段中实际上有一个指导性的例子: EXAMPLE After the declaration: struct s { int n; double d[]; }; the structure struct s has a flexible array member d. A typical way to use this is: int m = /* some value */; struct s *p = malloc(sizeof (struct s) + sizeof (double [m])); and assuming that the call to malloc succeeds,the object pointed to by p behaves,for most purposes,as if p had been declared as: struct { int n; double d[m]; } *p; (there are circumstances in which this equivalence is broken; in particular,the offsets of member d might not be the same). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |