1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- // flexmemb.c -- flexible array member (C99 feature)
- #include <stdio.h>
- #include <stdlib.h>
- struct flex
- {
- size_t count;
- double average;
- double scores[]; // flexible array member
- };
- void showFlex(const struct flex * p);
- int main(void)
- {
- struct flex * pf1, *pf2;
- int n = 5;
- int i;
- int tot = 0;
-
- // allocate space for structure plus array
- 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);
-
- 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);
- }
|