C语言零基础速通——结构体(7分钟搞懂)

​结构体的具体应用:通常用来存储一个有同类性质的个体组成的群体

eg.

姓名学号成绩
小红10100
小明1190

当我们用数组来存取这些信息的时候,想要一一对应就会很复杂

结构体就是用来整体化存取这类信息。


定义结构体及结构体变量


    形式:

  • type1: 先声明结构体类型,再定义结构体变量

struct 结构体名{  类型标识符 成员名1;  类型标识符 成员名2;  ...;};struct 结构体名 变量名1,变量名2,...;

eg1.

struct student//结构体名{  char name[20];//存取字符串用字符数组,记录姓名  int num;//记录学号  int score;//记录成绩};//分号别漏了!struct student stu1,stu2;


  • type 2: 定义结构体类型的同时定义变量

struct 结构体名{  类型标识符 成员名1;  类型标识符 成员名2;  ...;}变量名1,变量名2,...;

eg2.

struct student//结构体名{  char name[20];//存取字符串用字符数组,记录姓名  int num;//记录学号  int score;//记录成绩}stu1,stu2;//分号别漏了!


  • type 3: 不指定类型名,直接定义结构体类型变量(不建议使用

struct //不指定类型名{  类型标识符 成员名1;  类型标识符 成员名2;  ...;}变量名1,变量名2,...;

eg3.

struct //不指定类型名{  char name[20];//存取字符串用字符数组,记录姓名  int num;//记录学号  int score;//记录成绩}stu1,stu2;//分号别漏了!

tips:

  1. student 是结构体名

  2. 3-5行为成员表列

  3. stu1和stu2为变量名

  4. 区分结构体类型名和结构体变量

    结构体类型名结构体变量
    不分配存储空间分配存储空间
  5. 结构体定义最后的 “ ; ”注意别漏

  6. 成员名和变量名重名没关系


引用结构体


应用结构体变量中的一个成员的形式:

结构体变量名.变量名

eg.

student.name


结构体变量初始化


形式:

{}内按成员表列依次初始化

直接上例子:

struct student//结构体名{  char name[20];//存取字符串用字符数组,记录姓名  int num;//记录学号  int score;//记录成绩}stu1={"小红",10,100};//分号别漏了!

很多时候结构体数组更方便

type1:

eg.

struct student//结构体名{  char name[20];//存取字符串用字符数组,记录姓名  int num;//记录学号  int score;//记录成绩};struct student stu[2];//能存两个同学stu[2]={{"小红",10,100},{"小明",11,90}};//分号别漏了!

也可以把内层大括号略去

struct student//结构体名{  char name[20];//存取字符串用字符数组,记录姓名  int num;//记录学号  int score;//记录成绩};struct student stu[2];//能存两个同学stu[2]={"小红",10,100,"小明",11,90};//分号别漏了!

type2:

eg.

struct student//结构体名{  char name[20];//存取字符串用字符数组,记录姓名  int num;//记录学号  int score;//记录成绩}stu[2];//能存两个同学stu[2]={{"小红",10,100},{"小明",11,90}};//分号别漏了!


总例:(可运行)

#include<stdio.h>struct student//结构体名{  char name[20];//存取字符串用字符数组,记录姓名  int num;//记录学号  int score;//记录成绩}stu[2];//能存两个同学main(){  struct student stu[2]={{"小红",10,100},{"小明",11,90}};  int i;//定义循环变量  for(i=0;i<=1;i++)  {    printf("姓名:%s\n学号:%d\n成绩:%d\n",stu[i].name,stu[i].num,stu[i].score);  }}


结构体的嵌套


结构体可以套结构体,用例子引出体会

  • 定义:

struct date{ int year; int month; int day;};struct person_birth{  char name[20];  char gender;  struct date birthday;//上一个结构体变量,此处出现嵌套}person;

可见,结构体嵌套,是在结构体中有对另一个结构体变量定义。

  • 调用:

用多个"."

直接上总例,调用部分会在注释部分标出,留意一下

eg.

#include<stdio.h>struct date{ int year; int month; int day;};struct person_birth{  char name[20];  char gender;  struct date birthday;//上一个结构体变量,此处出现嵌套};main(){  struct person_birth person[5];  int i;//定义循环变量  for(i=0;i<=4;i++)//由person[5]得出能记录5个人,i<=4  {    printf("输入成员数据:\n");    printf("姓名:\n");    scanf("%s",&person[i].name);//此处还未用到嵌套    printf("性别:\n");    scanf("%c",&person[i].gender);//此处还未用到嵌套    printf("出生年份:\n");    scanf("%d",&person[i].birthday.year);//结构体嵌套调用!    printf("出生月:\n");    scanf("%d",&person[i].birthday.month);//结构体嵌套调用!    printf("出生日:\n");    scanf("%d",&person[i].birthday.day);//结构体嵌套调用!  }  //输入部分结束,接下来是输出  printf("接下来输出成员信息\n");  for(i=0;i<=4;i++)//由person[5]得出能记录5个人,i<=4  {    printf("姓名:%s\n性别:%c\n出生日期:%d年%d月%d日\n",person[i].name,person[i].gender,person[i].birthday.year,person[i].birthday.month,person[i].birthday.day);  }  }

tips:

  1. 结构体的存入和调用一般都会用到循环

  2. 结构体在主函数前时,注意在主函数中要定义或声明结构体变量,如上例中的第19行

  3. 结构体定义后的那个分号不要漏


较难的链表在第九章之后更新,可以自行翻看(或等后续更新)

下一章节:指针(章节:9/9)


p.s. 

        小红书,知乎等平台搜索知识薪火站,也会上传相应笔记,感谢关注。

        有建议欢迎提出!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值