- 结构体对齐补齐
- 位段
struct A {char c;int i;double d;
};
void test8()
{struct A a;printf("%d", sizeof(a));
}
void test9()
{struct f {unsigned bit1 : 1;unsigned bit2 : 2;unsigned bit3 : 3;};struct f f1 = { 9,9,9 };printf("%d,%d,%d\n", f1.bit1, f1.bit2, f1.bit3);printf("\n%d\n", sizeof(f1));
}
- 案例
void test10()
{typedef struct Student{char name[20];int age;double score;} Student;int n;printf("请输入学生数:");scanf("%d", &n);Student* p = malloc(sizeof(Student) * n);if (NULL == p){printf("申请内存失败\n");return -1;}double count = 0;for (int i = 0; i < n; i++){printf("请输入第%d个同学的姓名:", i + 1);scanf("%s", (p + i)->name);printf("请输入第%d个同学的年龄:", i + 1);scanf("%d", &(p + i)->age);printf("请输入第%d个同学的成绩:", i + 1);scanf("%lf", &(p + i)->score);count += (p + i)->score;}printf("总分:%g,平均分:%g\n", count, count / n);}