1. 程式人生 > 實用技巧 >結構體和共用體

結構體和共用體

為什麼需要結構體

傳統解決辦法

陣列是相同型別資料的集合。

結構體可以存放不同型別的資料。

結構體和結構體變數的區別和聯絡

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);//重新整理
    }
    //輸出人員資料
    ..............
}