• C语言从入门到精通第20天(结构体的使用)


    结构体的定义

    通过前面的学习,我们可以用一个数据类型加变量表示一个属性,但是当表示多个属性时,一个基本数据类型就不能表示了,此时就可以用到结构体来将多个属性进行存储。

    语法:

    struct 结构体名称
    {
    成员变量1;
    成员变量2;
    成员变量3;
    ...
    成员变量n;
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    示例:用结构体表示学生的名字、性别、年龄、电话。

    struct student{
    		char name[32];
    		char sex;
    		int age;
    		char tel[12];
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    注意: 结构体也是一种数据类型,并且在结构体中不能定义函数。

    结构体变量的定义

    可通过以下几种方式进行定义:

    • struct 结构体名称 变量名;
      可通过将结构体和变量名进行联用,相当于定义一个数据类型 变量名,跟我们定义一个属性时是一样的,因为我们说过结构体也是一种数据类型,并且还可以通过以下方式进行定义。
    • struct 结构体名称 *变量名; >>>通过指针进行定义。
    • struct 结构体名称 变量名[长度]; >>>通过数组进行定义。

    扩展:

    除了上述的定于方法,结构体的定义还支持以下这个方式进行定义。语法:

    struct {
    成员变量1;
    成员变量2;
    ...
    成员变量3;
    }结构体变量1,结构体变量2,结构体变量3;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    示例:

    struct {
    int age;
    }A,B,C;
    // 这里的A,B,C是结构体变量
    
    • 1
    • 2
    • 3
    • 4

    这种结构的定义并不是很常用,了解即可。

    结构体中成员变量的初始化

    • 第一种:通过位置进行初始化
    struct student s = {
    "lisi",
    "男"
    18,
    "12345678910"
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    这种初始化方法在进行初始化时,他的初始化值类型必须和定义结构体变量的定义顺序一样。

    • 第二种:通过变量名前面加句点符号进行初始化
    struct student s = {
    .name = "lisi",
    .sex = "男",
    .age = 18,
    .tel = "12345678910";
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    结构体种成员变量的访问

    • 通过句点符号进行访问,这里的结构体变量必须是普通变量或者数组。
      s.age、s.sex、s.name、s.tel

    • 通过->进行访问,这里的结构体变量时指针变量
      struct student *p = &s1;这里的s1是一个完成初始化的普通结构体,可通过以下方式进行操作:
      1)下标法:p[i].成员变量
      2)指针法:(*(p+1)).成员变量
      3)指向操作符

    结构体的重新定义

    使用typedef关键字对结构体进行重新定义,语法:

    typedef struct student{
    成员变量1;
    成员变量2;
    成员变量3;
    ...
    成员变量n;
    }新类型1*新类型2;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    这里可以通过 新类型1 变量名1 或者 新类型2 指针变量名进行定义。

  • 相关阅读:
    【开源】SpringBoot框架实验室耗材管理系统
    vue中组件之间的通信
    dmesg和addr2line命令定位段错误
    vue3-布局右侧标签
    python数据分析——数据可视化(图形绘制)
    java基于ssm+vue+elementui的足球联赛会报名系统
    计算机毕业设计源码基于SSM的古风古韵二手家具交易系统程序+数据库
    第四章 数据库安全性
    如何更改代理ip,变更代理ip怎么实现?
    maui BlazorWebView+本地html (vue、uniapp等都可以) 接入微信sdk 开发 Android app
  • 原文地址:https://blog.csdn.net/m0_67021058/article/details/130898202