C语言,共用体定义与使用(几种写法)

#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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值