码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【C语言】入门——结构体


    目录

    结构体

    为什么有结构体?

    1.结构体的声明 

    1.2结构体变量的访问和初始化 

    2.结构体成员的访问


    结构体

    1. struct 结构体类型
    2. {
    3. //相关属性;
    4. }结构体变量;

    结构体和数组不同,同一类型的数据的集合是数组;

                结构体是多种类型的数据的集合;

    为什么有结构体?

    在平常生活中,我们记录一个一个学生的信息,往往是每人一张信息卡,这里面记录了名字,身高等信息,这些不是简单的整型,数组就能解决的。像这种卡片形式的数据结构是通过结构体(struct)实现的。

    1.结构体的声明 

    1. struct Stu
    2. {
    3. //定义学生相关属性
    4. char name[0];
    5. int age;
    6. }s3,s4;
    7. //s3,s4,是结构体类型Stu的变量名字
    8. // s3,s4是全局变量

     结构的成员可以是标量、数组、指针,甚至是其他结构体。

    1.2结构体变量的访问和初始化 

    1. struct str
    2. {
    3. int x;
    4. int y;
    5. }s1; //声明类型的同时定义变量s1
    6. struct str s2; //定义结构体变量s2

    同样可以对其赋值,采用{}的形式

    1. struct str
    2. {
    3. int age;
    4. char name[20];
    5. };
    6. struct str s1 = {18,"zhangsan"};
    1. struct student
    2. {
    3. int num;
    4. char name[10];
    5. };
    6. int main()
    7. {
    8. struct student s1;
    9. struct student s2;
    10. return 0;
    11. }

    总结:

    👍结构体类型定义的末尾必须有分号;

    👍成员类型可以是除本身所属结构体类型外的任何已有数据类型;

    👍在同一作用域内,结构体类型名不能与其他变量名或结构体类型名重名;

    👍结构体类型的作用域与普通变量的作用域相同:在函数内定义,则仅在函数内部起作用;在函数外定义,则有全局作用;

    2.结构体成员的访问

     👍结构体变量访问成员 结构变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数

    1. struct student
    2. {
    3. int age;
    4. char name[20];
    5. int score;
    6. }stu1 = {20,"zhangsan",60};
    7. int main()
    8. {
    9. printf("%s %d", stu1.name, stu1.age);
    10. return 0;
    11. }

     有时候我们得到的不是一个结构体变量,而是一个结构体的指针

    1. struct Stu
    2. {
    3. char name[20];
    4. int age;
    5. };
    6. void print(struct Stu* ps)
    7. {
    8. printf("name = %s age = %d\n", (*ps).name, (*ps).age);
    9. //使用结构体指针访问指向对象的成员
    10. printf("name = %s age = %d\n", ps->name, ps->age);
    11. }
    12. int main()
    13. {
    14. struct Stu s = {"zhangsan", 20};
    15. print(&s); //结构体地址传参
    16. return 0;
    17. }

    总结:

    函数传参的时候,形参是实参的一份拷贝,参数是需要压栈的。 如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的 下降。

    结构体传参的时候,要传结构体的地址。

    以上是简单的对C语言中结构体的介绍,不足之处还望指点。 

     

  • 相关阅读:
    Kafka偏移量自动提交设置
    电脑微信聊天记录监控要怎么做?找谁找?
    Hadoop2.x一次分布式HA启动时 ERROR Cannot set priority of xxxx process 解决方式
    JavaScript【静态方法、实例方法/to类、实例方法/get类、实例方法/set类、Math与Date实操、 JS时间戳、日期互相转换】(九)
    E2. Unforgivable Curse (hard version)
    Kubernetes 集群中流量暴露的几种方案
    无穷级数几个基础知识
    CSS学习(2)-盒子模型
    【虚幻4】UMG组件的简介与使用(Panel 面板组件篇)
    汇总区间(C++解法)
  • 原文地址:https://blog.csdn.net/m0_67367079/article/details/132651667
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号