C语言基础九- 共用体

4 阅读1分钟

C语言基础九- 共用体

1. 定义与声明

#include <stdio.h>
#include <string.h>

union UserInfo{
    char idStr[50];
    int idNum;
};

int main(void){
  
    union UserInfo userInfo;
    
    userInfo.idNum = 6789;
    printf("idNum:%d\n",userInfo.idNum);  //6789
    
    //idStr和idNum,共享一份内存,修改一个成员会覆盖其他成员的值
    strcpy(userInfo.idStr, "xyz");
    printf("idNum:%d\n",userInfo.idNum); // 乱码值
    printf("idStr:%s\n",userInfo.idStr); //xyz
    
    //共用体的内存是由最大成员的大小决定的,大于等于
    printf("sizeOfuserInfo:%zu\n",sizeof(union UserInfo));  // 52
    printf("sizeOfidStr:%zu\n",sizeof(userInfo.idStr));  //50
     
    return 0;
}

2. 典型用途

  • 用途1
union UserID{
    char idStr[50];
    int idNum;
};

struct User{
    char name[20];
    union UserID id;
}

  • 用途2 (联合类型)
#include <stdio.h>
#include <string.h>

union IntFloat{
    int i;
    float j;
};


int main(void){
  
    union IntFloat x;
    x.i = 3.14f;
    printf("十六进制输出: %x\n",x.i);
     
    return 0;
}