第一讲:结构型与数组

  结构型是一种自定义数据类型,与基本数据类型如int的作用相同,用于定义变量。数组是一种数据结构,用于组织数据,也是一组变量,有整型数组,有某种结构型数组。类型是一类数据(或存储单元)的抽象,变量是具体的某类存储单元的标识。结构型变量与数组才有可比性。
    基本数据类型是一类数的抽象,如整型是整数的抽象,而结构型是一类对象的抽象,如表示学生的结构型。与整数相比,学生具有多种属性,如姓名、性别、出生日期、英语成绩等等。抽象学生的结构型可定义为:
struct Student
{
    char name[10];
    int sex; //1为男0为女
    int year;
    int month;
    int day;
    float grade;//英语成绩
};
    有了名为学生的结构型后,需存储两个学生的信息时,他们的信息可保存在两个相关的结构型变量中。语句struct Student zhang3;定义了一个结构型变量zhang3,实际上定义了6个变量:长度为10的字符型数组zhang3.name,整型变量zhang3.sex、zhang3.year、zhang3.month、zhang3.day,单精度变量zhang3.grade。
    定义一个数组变量也定义了多个变量,但这些变量的类型相同,而结构型变量的多个成员变量类型可以不同。
    使用结构型变量实际上就是使用其多个“普通”的成员变量,如下面程序所示。
#include <stdio.h>
struct Student
{
    char name[10];
    int sex; //1为男0为女
    int year;
    int month;
    int day;
    float grade;//英语成绩
};

#include <stdio.h>
int main()
{
    struct Student zhang3;
    printf("请输入张三的信息\n");
    scanf("%s", zhang3.name);
    scanf("%d", &zhang3.sex);
    scanf("%d%d%d", &zhang3.year, &zhang3.month, &zhang3.day);
    scanf("%f", &zhang3.grade);
    printf("张三的信息:\n");
    printf("姓名:%s\n", zhang3.name);
    printf("性别:%s\n", zhang3.sex==1 ? "男" : "女");
    printf("出生日期:%d年%d月%d日\n", zhang3.year, zhang3.month, zhang3.day);
    printf("英语成绩:%.1f\n", zhang3.grade);
    return 0;
}
    程序的执行情况如下:
请输入张三的信息
Zhang3 1 2000 1 1 93.9
张三的信息:
姓名:Zhang3
性别:男
出生日期:2000年1月1日
英语成绩:93.9
    可以定义结构型数组,如语句struct Student stu[2];就定义了一个名为stu的结构型数组,实际上也就是定义了两个名为stu[0]和stu[1]结构型变量,不过,每个结构型变量又包含了多个“普通”的成员变量,即对于结构型变量stu[0],应理解为多个“普通”的变量,如长度为10的字符型数组stu[0].name(下标操作符和成员操作符的优先级相同,左结合)……。
    也可以用间接引用的方式通过指针使用相关的存储单元。语句struct Student *pStu;就定义了一个结构型指针变量,通过赋值操作使其指向某个存储单元,如pStu=&zhang3;,则*pStu与zhang3标识了同一个存储单元,两者可以互换使用。通过指针变量使用结构型的成员变量需用(*pStu).name(间接引用操作符的优先级比成员操作符的低,故不能省略括号),但常用pStu->name的形式。
    结构型变量用于存储具有多个属性的对象,使用结构型变量就是使用其多个“普通”的成员变量。
    (练习结构型数组和结构型指针的用法)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值