日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言 共用体/联合体 union

發布時間:2023/12/13 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言 共用体/联合体 union 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引入


傳統技術的缺陷—結構體

共用體基本介紹

共用體與結構體一樣都是值傳遞

定義共用體的三種方式

內存布局

共用體數據空間=占用最大的成員的數據空間大小

案例解析
1)

2)

3)

4)

注:
1010 1101 0101 0100所對應的十進制是負數
計算機中的二進制都是以補碼存儲的,所以1010 1101 0101 0100是補碼

計算時,補碼=>反碼=>原碼
補碼=原碼取反+1
所以補碼=>原碼: 補碼-1,再取反
補碼: 1010 1101 0101 0100
補碼-1: 1010 1101 0101 0011
取反: 1101 0010 1010 1100
計算此時得到的原碼:
-(214+212+29+27+25+23+2^2)
=-(16384+4096+512+128+32+8+4)
=-21164
所以輸出原碼:-21164

記住:計算機中存儲的是補碼,輸出的是原碼
正數:原碼=反碼=補碼

案例實踐


兩種定義共用體的方式都可以

代碼
fflush(stdin);//刷新一下輸入,保證數據都存入到結構體中

以表格的形式輸出信息

練習–公司職員信息

#include<stdio.h> #include<string.h> //共用體union--職員信息表格 #define SIZE 100 struct Staff{char name[10];//姓名int age;//年齡char flag;//標識 a輸入公司,b輸入職業union Position{//不能使用char *com; 這里是字符串常量,不能改變char com[10];//公司char pro[10];//職業}pos; }staff[SIZE];//定義結構體數組,存儲多個結構體變量 int main() {int i=0,d=1,j;while(1){printf("input information %d:\n",i);printf("d:\n");scanf("%d",&d);//d=1繼續循環,d=0跳出循環if(d==0)//d=0{break;//跳出while循環}else if(d==1)//d=1{printf("name age flag:\n");scanf("%s %d %c",staff[i].name,&(staff[i].age),&(staff[i].flag));if(staff[i].flag=='a'){printf("com:\n");scanf("%s",staff[i].pos.com);}else if(staff[i].flag=='b'){printf("pro:\n");scanf("%s",staff[i].pos.pro);}}i++;}fflush(stdin);printf("exit:\nprint the information:\n");printf("name\tage\tpos\n");for(j=0;j<i;j++){if(staff[j].flag=='a')printf("%s\t%d\t%s\n",staff[j].name,staff[j].age,staff[j].pos.com);else if(staff[j].flag=='b')printf("%s\t%d\t%s\n",staff[j].name,staff[j].age,staff[j].pos.pro);}getchar();//entergetchar();return 0; }

總結

以上是生活随笔為你收集整理的C语言 共用体/联合体 union的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。