结构体和共用体学习笔记

为什么需要结构体

传统解决办法

数组是相同类型数据的集合。

结构体可以存放不同类型的数据。

结构体和结构体变量的区别和联系

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);//刷新
    }
    //输出人员数据
    ..............
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值