[c/c++] programming之路(27)、union共用體

共用體時刻只有一個變量,結構體變量同時並存

1、建立共用體的三種形式

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

union info{
    int price;
    char str[30];
}data1,data2,*p,data[10];            //第一種建立形式
union info dataA,dataB,*q,dataN[10];//第二種形式
union{                                //第三種形式:匿名共用體,限制共用體的數量
    char str[30];
    int price;
}a,b,c;

void main(){
    union info in1;
    in1.price=40;
    strcpy(in1.str,"聯想");
    printf("%d\n",sizeof(union info));//共用體的長度爲其中某個變量的最長長度
    printf("%d,%s\n",in1.price,in1.str);//任什麼時候刻,共用體同時只能有一個變量存在
    
    system("pause");
}

2、共用體的大小及初始化

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

union dataA{
    int a;
    short b;
    char c;
};
union dataB{
    double b;
    char str[9];
};

void main(){
    //共用體的大小必須至少包含最大的成員數據,能夠整除最小的成員數據
    printf("%d\n",sizeof(union dataA));
    printf("%d\n",sizeof(union dataB));//填充現象:共用體的大小必定能夠被最小類型整除
    
    system("pause");
}

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

union info{
    int price;
    char str[30];
};

void main(){
    union info in1;
    in1.price=40;
    strcpy(in1.str,"聯想");//共用體起做用的是最後一個賦值的成員變量
    printf("%d,%s\n",in1.price,in1.str);

    union info in2={30};//大括號初始化時,只能初始化第一個
    in2=in1;//共用體能夠直接賦值
    printf("%d,%s\n",in2.price,in2.str);
    
    system("pause");
}

3、指針引用

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

union info{
    int price;
    char str[30];
};

void main(){
    union info info={1};
    //strcpy(info.str,"china");
    printf("%d,%s\n",info.price,info.str);
    union info *p=&info;
    printf("%d,%s\n",p->price,(*p).str);
    
    system("pause");
}

相關文章
相關標籤/搜索