#include <stdio.h>
#include <stdbool.h>
#include <string.h>
// 共用体定义
//方式一:
union data {
int a;
char b;
float c;
};
union total {
int aaa;
float bbb;
char ccc[10];
};
//方式二:
union data1 {
int aa;
float bb;
char cc[50];
} un_data1, un_data2; // 正确声明变量
//方式三
union { // 匿名共用体类型定义并直接声明变量
int aaa;
float bbb;
char ccc[20];
} un_data_a, un_data_b;
// 命名共用体类型(使用typedef)
//方式四
typedef union {
int i;
float f;
char str[20];
} DataUnion; // 添加类型名
int main() {
// 示例:使用typedef定义的共用体类型
//方式一:
union data myData;
printf("方式一:\n");
myData.a = 10;
printf("整数值: %d\n", myData.a);
myData.b = 'A';
printf("字符值: %c\n", myData.b);
myData.c = 3.14f;
printf("浮点值: %f\n", myData.c);
printf("占用内存大小: %lu\n", sizeof(myData));
// 方式二:正确使用独立变量
printf("方式二:\n");
un_data1.aa = 100; // 重新赋值以避免被覆盖
printf("un_data1.aa: %d\n", un_data1.aa);
un_data2.bb = 3.14f;
printf("un_data2.bb: %.2f\n", un_data2.bb);
strcpy(un_data2.cc, "World");
printf("un_data2.cc: %s\n\n", un_data2.cc);
//方式三:
printf("方式三:");
un_data_a.aaa = 20;
un_data_b.bbb = 6.28f;
strcpy(un_data_b.ccc, "C Programming");
//方式四:匿名共用体类型
printf("方式四:\n");
DataUnion myData11;
myData11.i = 30;
printf("myData11.i: %d\n", myData11.i);
myData11.f = 2.718f;
printf("myData11.f: %.3f\n", myData11.f);
strcpy(myData11.str, "Union");
printf("myData11.str: %s\n", myData11.str);
// 方式五:
// 指针访问共用体
printf("指针访问共用体:\n");
// DataUnion myData12;
DataUnion *ptr = &myData11; // 修正:使用正确的类型
// 初始化成员
ptr->i = 42;
printf("整数值: %d\n", ptr->i); // 通过指针访问
ptr->f = 3.14159f;
printf("浮点值: %.3f\n", ptr->f);
strcpy(ptr->str, "Pointer");
printf("字符串值: %s\n", ptr->str);
// 方式六:
printf("方式六:\n");
union total total1 = {.aaa = 10, .bbb = 3.14f};
strcpy(total1.ccc, "cccc");
printf("total1.aaa: %d\n", total1.aaa);
printf("total1.bbb: %.2f\n", total1.bbb);
printf("total1.ccc: %s\n", total1.ccc);
return 0;
}
C语言,共用体定义与使用(几种写法)
于 2025-07-10 18:01:24 首次发布