C语言中的共用体
1. 共用体与结构体区别:
- 结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
2. 共用体的定义:
union data{
int a;
char b;
double c;
};
union data A, B, C;
union data{
int a;
char b;
double c;
} A, B, C;
union {
int a;
char b;
double c;
} A, B, C;
3. 结构体与共用体的嵌套:
#include <stdio.h>
#include <stdlib.h>
#define TOTAL 4
struct{
char name[20];
int num;
char sex;
char profession;
union{
float score;
char course[20];
} sc;
} bodys[TOTAL];
int main(){
int i;
for(i=0; i<TOTAL; i++){
printf("Input info: ");
scanf("%s %d %c %c", bodys[i].name, &(bodys[i].num), &(bodys[i].sex), &(bodys[i].profession));
if(bodys[i].profession == 's'){
scanf("%f", &bodys[i].sc.score);
}else{
scanf("%s", bodys[i].sc.course);
}
fflush(stdin);
}
printf("\nName\t\tNum\tSex\tProfession\tScore / Course\n");
for(i=0; i<TOTAL; i++){
if(bodys[i].profession == 's'){
printf("%s\t%d\t%c\t%c\t\t%f\n", bodys[i].name, bodys[i].num, bodys[i].sex, bodys[i].profession, bodys[i].sc.score);
}else{
printf("%s\t%d\t%c\t%c\t\t%s\n", bodys[i].name, bodys[i].num, bodys[i].sex, bodys[i].profession, bodys[i].sc.course);
}
}
return 0;
}