*简介 伸缩数组(flexible array)这是C99对结构体功能的扩展.可伸缩性的体现在于,在结构体的原型声明时,可以声明一个没有指定数组长度的数组,在使用时通过malloc动态决定结构体变量的...
*简介
伸缩数组(flexible array)这是C99对结构体功能的扩展.可伸缩性的体现在于,在结构体的原型声明时,可以声明一个没有指定数组长度的数组,在使用时通过malloc动态决定结构体变量的数组大小.
*规则
---伸缩数据必须是结构体的最后一个成员
编译报错:"error: flexible array member not at end of struct"
---结构体至少还有一个其他成员
编译报错:"error: flexible array member in otherwise empty struct"
---伸缩数组的声明方式,形如char name[],即方括号没有内容
*示例
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
flexible_array.c#include <stdio.h>
#include <stdlib.h>
struct flexarr{
int count;
double sum;
double avrg;
double value[]; //flexible array
};
void average(struct flexarr *);
int main(void){
struct flexarr *fa; //声明结构体指针
int n = 6;
int i;
fa = malloc(sizeof(struct flexarr)+n*sizeof(double)); //分配内存
fa->count = n;
for(i=0;i<n;i++){
printf("value%d:___\b\b\b",i+1);
scanf("%lf",&(fa->value[i])); //赋值
}
average(fa); //求平均数
printf("The average is: %f\n",fa->avrg);
free(fa);
return 0;
}
void average(struct flexarr *ptr){
int i;
double sum = 0;
for(i=0;i<ptr->count;i++){
sum += ptr->value[i];
}
ptr->sum = sum;
ptr->avrg = sum / ptr->count;
}