码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C语言结构体初级


    目录

    一、为什么要用结构体

    二、使用结构体的具体形式

    1.结构体类型的声明(main函数外部)

    2.结构体变量的定义(在main函数内或者外) 

    3.结构体变量的初始化

    4.结构体成员的访问

    5.结构体的传参


    跑了这么久,再坚持一下吧

    本专栏适用于有一定C语言基础并且还要继续学习的人 

    往期回顾:

    C语言函数详解

    C语言操作符详解

    C语言实现扫雷及进阶

    C语言实现三子棋

    C语言实现猜数字游戏

    C语言for循环详解

    C语言初学可能会遇到的问题(一)

    文章质量在努力提高中...

    本文将介绍结构体初级用法,内容比较简单,但会对以后更难的学习打下基础。当然结构体也是一种很方便的存储复杂变量的形式,非常实用

    一、为什么要用结构体

    为了描述一个复杂类型的变量,如一个学生的数据,通常包括:性别,成绩,身高,体重等,将这些数据都存入一个集合中,这个集合就叫结构体

    二、使用结构体的具体形式

    结构体要想有效,就得先声明,再使用。

    1.结构体类型的声明(main函数外部)

    结构体成员的类型也是根据实际情况来定的,一般要看结构体对象有那些属性,对应的数据类型为啥就定义为啥,结构的成员可以是标量、数组、指针,甚至是其他结构体。

    2.结构体变量的定义(在main函数内或者外) 

     同样,可以将相同结构体类型的结构体变量放入一个数组中

    那么数组S的数组元素就成了S[0]和S[1],在后续使用结构体时可以直接引用数组名+下标代替变量名。如S[0]就相当于S1,S[1]就相当于S2。

    第二种方法:在main函数外,结构体后定义结构体变量

    特殊情况:使用typedef对结构体类型进行重定义

    3.结构体变量的初始化

    用大括号将结构体变量对应的所有结构体成员括起来,不同结构体成员之间用逗号隔开,如果是字符成员的话要用双引号引起来,按顺序对结构体变量进行初始化,如在结构体声明中先声明name,就要先初始化name,再声明age,就要再初始化age...

    结构体按想要的顺序进行初始化的方法

    按想要的顺序:.结构体成员名1=,.结构体成员2=   ....

    4.结构体成员的访问

    (.)结构体成员访问操作符1,使用方法:结构体变量.结构体成员

    (->)结构体成员访问操作符2,使用方法:结构体指针变量->结构体成员

    使用方法案例具体见下面的结构体传参

    5.结构体的传参

    函数的传参可以参考:C语言函数详解

    直接上代码

    1. struct S
    2. {
    3. int data[1000];
    4. int num;
    5. };
    6. struct S s = {{1,2,3,4}, 1000};
    7. //结构体传参
    8. void print1(struct S s)
    9. {
    10. printf("%d\n", s.num);
    11. }
    12. //结构体地址传参
    13. void print2(struct S* ps)
    14. {
    15. printf("%d\n", ps->num);
    16. }
    17. int main()
    18. {
    19. print1(s); //传结构体
    20. print2(&s); //传地址
    21. return 0;
    22. }

    代码讲解:结构体传参有两种方式:直接传结构体变量;传结构体变量的地址

    将结构体变量直接传参上去后,用(.)操作符访问结构体成员即可;将结构体变量的地址作为参数传上去后用(->)操作符访问结构体成员。

    传结构体变量地址的好处:

    函数传参的时候,参数是需要压栈的。 如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。而传地址的时候只需要传4/8个字节,相对来说非常划算(地址大小在32位机器上是4个字节大小,在64位机器上是8个字节大小)

    所以在结构体传参的时候,要传地址

    在这里插入图片描述

    本文收录于水火莲花-C疑难专题           C语言学习专题​​​​​​

    这两个专题可用于正在学习C语言,并且有一定基础的人,专栏持续免费更新中...

  • 相关阅读:
    vue3 搭配ElementPlus做基础表单校验 自定义表单校验
    flex布局独占一行实现方法
    Java Stream API详解:高效处理集合数据的利器
    小程序开发.uniapp.生命周期
    React 18的新特新
    CPU超高问题排查
    Java8新特性
    Redis源码漂流记(二)-搭建Redis调试环境
    std::c++ 中格式化任意字符串
    化工行业调研:有机硅胶市场现状及规模分析
  • 原文地址:https://blog.csdn.net/zyb___/article/details/130795808
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号