示例
//Visual Studio中加上这句才可以使用scanf() //否则只能使用scanf_s() #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <ctype.h> //malloc()、free() #include <stdlib.h> #include <time.h> struct flex { size_t count; double average; //C99新增的一个特性: //伸缩型数组成员必须是结构的最后一个成员 //结构中必须至少有一个成员 //伸缩数组的声明类似于普通数组,只是它的方括号中是空的 double scores[]; //伸缩型数组成员(flexible array member) }; void showFlex(const struct flex * p); //argc: 参数个数 argv[]: 参数数组 //int main(int argc, char **argv) int main(int argc, char *argv[]) { struct flex *pf1, *pf2; int n = 5; int i; int tot = 0; // 为结构和数组分配存储空间 pf1 = malloc(sizeof(struct flex) + n * sizeof(double)); pf1->count = n; for (i = 0; i < n; i++) { pf1->scores[i] = 20.0 - i; tot += pf1->scores[i]; } pf1->average = tot / n; showFlex(pf1); n = 9; tot = 0; pf2 = malloc(sizeof(struct flex) + n * sizeof(double)); pf2->count = n; for (i = 0; i < n; i++) { pf2->scores[i] = 20.0 - i / 2.0; tot += pf2->scores[i]; } pf2->average = tot / n; showFlex(pf2); //释放内存 free(pf1); free(pf2); system("pause"); return 0; } void showFlex(const struct flex * p) { int i; printf("Scores : "); for (i = 0; i < p->count; i++) printf("%g ", p->scores[i]); printf("\nAverage: %g\n", p->average); }
运行测试