結構體和共用體
阿新 • • 發佈:2020-12-23
為什麼需要結構體
傳統解決辦法
陣列是相同型別資料的集合。
結構體可以存放不同型別的資料。
結構體和結構體變數的區別和聯絡
1)結構體是自定義的資料型別,表示的是一種資料型別,
2)結構體變數是一個具體變數
int num1l//int為資料型別,而num1是具體的int變數
3)結構體變數在同一記憶體區域
結構體成員
結構體變數需要給成員賦值,如果沒有賦值就使用可能導致程式異常終止。
成員是結構體的一個組成部分,一般為基本資料型別,也可以是陣列,指標,結構體等。
一個結構體變數成員的更改不影響其他成員。
定義結構體的三種方式
賦值方式
1)
具體例子
三種定義方式
結構體應用例項
1)一個景區根據遊人的年齡收取不同價格的門票。
2)遊人結構體(visitor),根據年齡段決定能夠購買的門票價格並輸出
3)規矩:年齡》18 門票為20 其他情況免費
4)可以迴圈從控制檯輸入名字和年齡,列印門票收入情況,如果名字輸入n,則推出程式
#include<stdio.h> #include<stdib.h> struct Visitor { char name[10]; int age; double pay;//應付票價 } //因為結構體預設為值傳遞,會拷貝一份完整的資料,因此,為了提高效率,我們直接接收地址 void ticket(struct Vistor*vistor){ if ((*vistor).age>18){ (*vistor).pay=20; } else{ (*vistor).pay=0; } } void main(){ while(1){ printf("請輸入名字和年齡"); scanf("%s%d",&vistor.name,&vistor.age); if !strcmp(vistor.name,"n"){ break; } ticket(&vistor); printf("門票錢%d",ticket.pay); } printf("退出程式"); getchar(); getchar(); }
共用體
共用體的記憶體佈局
實踐
#include<stdio.h> #define TOTAL 2 //人員總數 struct Person{ char name[20]; int number; char sex; union{ float score; char couse(20); }sc } void main(){ int i; struct Person persons[TOTAL];//定義一個數組 for (i=0;i<TOTAL;i++){ scanf("%s%d%c%s",persons[i].name,&persons[i].num.........)//個人資料取出 if(persons[i].profession=='s'){ printf("請輸入學生成績"); scanf("%f",&persons[i].sc.score); }else{ scanf("%s",persons[i].sc.course); } fflush(stdin);//重新整理 } //輸出人員資料 .............. }