C语言——结构体类型(一)【结构体定义,创建,初始化和引用】

2024-02-26 1191阅读

温馨提示:这篇文章已超过435天没有更新,请注意相关的内容是否还可用!

📝前言:

在实际编程过程中,我们可能会希望把一些关联的数据存放在一起,这样方便我们使用。但是这些数据的类型有时候并不一致,例如一个学生的信息:有名字(字符串),有年龄(整数),性别(字符)······这时候,我们就可以使用自定义类型——结构体类型,将这些类型不一样的关联数据放在一个结构体类型里面。

这篇文章我们来讲讲结构体类型:

1,结构体的定义

2,结构体变量的创建与初始化

3,结构体成员的引用

🎬个人简介:努力学习ing

📋个人专栏:C语言入门基础

🎀CSDN主页 愚润求学

🌄每日鸡汤:未来是怎么来的?未来不是等来的!


文章目录

  • 结构体类型
    • 一,结构体类型的定义(声明)
      • 1,一般结构体定义
      • 2,组合型结构体定义
      • 二,结构体变量的创建与初始化
        • 1,变量的创建(定义)
          • (1)先定义结构体类型,在创建结构体变量
          • (2)定义结构体类型,同时创建结构体变量
          • (3)通过定义无名结构体类型来定义结构体变量
          • 2,变量的初始化
            • (1)按照结构体顺序初始化
            • (2)按照指定的顺序初始化
            • 三,结构体成员的引用

              结构体类型

              一,结构体类型的定义(声明)

              1,一般结构体定义

              C语言中结构体类型的定义形式:
              struct  结构体名
              {
                   成员项表列
              };
              //在定义结构体类型的时候,成员不需要初始化;当我们创建了变量时,才需要对变量成员初始化
              

              例如我们要定义一个【有名字(字符串),有年龄(整数),性别(字符)】的结构体类型,名字叫stu:

              定义形式如下👇🏻

              struct stu
              {
                  char name[20];
                  int age;
                  char sex;
              }
              

              2,组合型结构体定义

              比如我们要在上面stu结构体的基础上补充一个出生日期(出生日期还要包括:年,月,日)

              这个时候,我们就可以多定义一个能够记录出生日期的date结构体类型,然后再在定义学生结构体类型的时候,引用这个date结构体

              具体定义形式如下👇🏻

              struct date
              {
                  int year;
                  int month;
                  int day;
              };
              struct stu
              {
                  char name[20];
                  int age;
                  char sex;
                  struct date birthday;
              };
              

              注意:

              在定义组合型的结构体类型时,一定要遵守先定义后使用的原则。

              例如:定义上面的stu结构体时,成员birthday是一个结构体变量,那我们就要保证birthday这个结构体变量的结构体类型在之前已经先定义过了(在这里也就是date已经先定义了)

              二,结构体变量的创建与初始化

              1,变量的创建(定义)

              (1)先定义结构体类型,在创建结构体变量
              struct stu   /*定义学生结构体类型*/
              {
                  char name[20];   /*姓名*/
                  int age;        /*年龄*/
                  char sex;      /*性别*/
              };
              struct stu s1,s2;   /*定义结构体变量*/
              

              利用这种定义形式,可以在程序的任何地方,在先定义后使用的原则下,定义属于改结构体类型的变量

              (2)定义结构体类型,同时创建结构体变量
              struct stu   /*定义学生结构体类型*/
              {
                  char name[20];   /*姓名*/
                  int age;        /*年龄*/
                  char sex;      /*性别*/
              }s1,s2;    /*同时定义结构体变量*/
              

              将变量直接定义在结构体类型的后面,采用这样的定义方式,在书写上比较紧凑。但对要多处定义结构体变量不方便

              (3)通过定义无名结构体类型来定义结构体变量
              struct     /*无结构体名*/
              {
                  char name[20];   
                  int age;        
                  char sex;      
              }s1,s2;    /*同时定义结构体变量*/
              

              但是,由于该定义方式无法记录该结构体的类型,所以,这种定义形式除了直接定义变量外,不能再定义该结构体的其他变量。(这样的定义,使程序的扩展性受到很大限制,所以建议少用这种方式定义结构体变量)

              2,变量的初始化

              struct stu   
              {
                  char name[20];   
                  int age;        
                  char sex;      //我们用B表示男,用G表示女
              };
              

              假如我们要创建两个上面这种结构体类型的变量,并初始化:

              (1)按照结构体顺序初始化
              struct stu s1 = {"zhangsan",20,'B'};
              struct stu s2 = {"wangwu",18,'G'};
              
              (2)按照指定的顺序初始化

              其实也就是用到了对结构体成员的引用

              struct stu s1 = {.age = 20, .name = "zhangsan", .sex = 'B'};
              struct stu s2 = {.age = 18, .name = "wangwu", .sex = 'G'};
              

              当然,在定义结构体类型的同时,创建的结构体变量,也可以同时初始化

              struct stu 
              {
                  char name[20];   
                  int age;        
                  char sex;    
              }s1 = {"zhangsan",20,'B'};
              

              三,结构体成员的引用

              对结构体成员的引用我们需要使用到运算符“.”

              使用格式:

              结构体类型变量名.成员名

              如:s1.age

              每使用一次.运算符,其实就是拨开了一层。

              赋值时,我们需要找到最内层的(能赋值的)成员

              例如👇🏻

              #include
              struct date
              {
                  int year;
                  int month;
                  int day;
              };
              struct stu
              {
                  char name[20];
                  int age;
                  char sex;
                  struct date birthday;
              };
              int main()
              {
                  struct stu s1 = { "zhangsan",20,'B',{2005,1,1} };
                  printf("%d\n", s1.age);
                  printf("%d\n", s1.birthday.day);
              }
              

              这个程序里的结构体类型stu是内包含一个结构体成员birthday的,所以当我们要引用birthday里面的成员时,我们就需要再用一次.运算符:s1.birthday.day

              运行结果:

              C语言——结构体类型(一)【结构体定义,创建,初始化和引用】


              🌈我的分享也就到此结束啦🌈

              要是我的分享也能对你的学习起到帮助,那简直是太酷啦!

              若有不足,还请大家多多指正,我们一起学习交流!

              📢公主,王子:点赞👍→收藏⭐→关注🔍

              感谢大家的观看和支持!祝大家都能得偿所愿,天天开心!!!

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]