当前位置: 首页 > news >正文

准备工作之结构体[基于郝斌课程]

为什么会出现结构体
  为了表示一些复杂的数据,而普通的基本类型变量无法满足要求
 
什么叫结构体
  结构体是用户根据实际需要自己定义的复合数据类型
 
如何使用结构体
普通结构体变量.成员变量

/*
@file      main.c
@brief     数据结构预备知识之结构体学习
@author    EricsT (EricsT@163.com)
@version   v1.0.0
@date      2025-09-09
@history   2025-09-09 EricsT - 新建文件
*/#include <stdio.h>
#include <string.h>struct Student//定义一个数据类型
{int sid;//结构体成员char name[200];int age;
};//该处分号不能省略int main(void)
{Student st = { 1000, "zhangsan", 20 };//结构体变量printf("%d %s %d\n", st.sid, st.name, st.age);st.sid = 99;strcpy(st.name, "lisi");//st.name = "lisi"st.age = 22;printf("%d %s %d\n", st.sid, st.name, st.age);return 0;
}
结构体指针变量->成员变量

/*
@file      main.c
@brief     数据结构预备知识之结构体指针
@author    EricsT (EricsT@163.com)
@version   v1.0.0
@date      2025-09-09
@history   2025-09-09 EricsT - 新建文件
*/#include <stdio.h>struct Student//定义一个数据类型
{int sid;//结构体成员char name[200];int age;
};//该处分号不能省略int main(void)
{Student st = { 1000, "zhangsan", 20 };//结构体变量Student* pst;//结构体指针pst = &st;pst->sid = 99;//pst->sid等价于(*pst).sid等价于st.sidreturn 0;
}
pst->sid[表示pst所指向的结构体变量中的sid这个成员]
 
注意事项
结构体变量不能加减乘除,但是可以相互赋值
普通结构体变量和结构体指针变量作为函数传参的问题

/*
@file      main.c
@brief     数据结构预备知识之结构体与函数
@author    EricsT (EricsT@163.com)
@version   v1.0.0
@date      2025-09-09
@history   2025-09-09 EricsT - 新建文件
*/#include <stdio.h>
#include <string.h>struct Student//定义一个数据类型
{int sid;//结构体成员char name[200];int age;
};//该处分号不能省略void f(Student* pst)
{(*pst).sid = 99;strcpy(pst->name, "zhangsan");pst->age = 20;
}//此时传数据,会把st整体传进来,意味着需要传Student大小过去
//耗时耗内存
void g(Student st)
{printf("%d %s %d\n", st.age, st.name, st.sid);
}//此时只传递了4个字节,但是可以访问整个结构体
void h(Student* pst)
{printf("%d %s %d\n", pst->age, pst->name, pst->sid);}int main()
{Student st;//此时已在内存中给其分配内存空间,由于未初始化,所以该块内存中的值是随机值f(&st);g(st);h(&st);return 0;
}

 

http://www.gsyq.cn/news/1285.html

相关文章:

  • 软工课程第一次作业
  • 初始化树莓派(Raspberry Pi)系统并以 ssh 连接教程(只需读卡器、手机开热点,无需显示器) - tsunchi
  • CF
  • Ubuntu 安装 VSCode
  • A
  • 【2024-2025第二学期】助教工作学期总结
  • 对抗样本
  • ssh相关问题
  • 使用 Visual Studio 2022 创建动态库和静态库 - Invinc
  • 软件
  • 打工人必看!昆工MBA“项目管理”杀疯了
  • 201912_BUUCTF_Base64隐写
  • 软考达人-案例分析
  • kettle插件-sqlserver cdc插件,从sqlserver获取实时数据so easy,早早下班
  • try hack me.md
  • 7. LangChain4j + 记忆缓存详细说明 - Rainbow
  • 在AI技术唾手可得的时代,挖掘新需求成为制胜关键——某知名语音识别框架需求洞察
  • 英语_阅读_raise awareness about water conservation_待读
  • [豪の学习笔记] 软考中级备考 基础复习#5
  • 02020212 .NET Core重难点知识12-服务定位器、.NET依赖注入示例
  • apache详细配置
  • 9.8总结
  • 在 AlmaLinux 9 使用 Podman 部署 Redis 7.4.5 并优化内核参数
  • 基于调度场算法将中缀表达式转换为后缀表达式
  • linux下安装pycharm时,中文无法显示的问题
  • Docker,Containerd配置私有Harbor仓库和Notary服务器
  • Ubuntu安装containerd
  • 我重新制作动画系统的思路
  • 港科 Tower A 宿舍凝水之谜
  • Transformer 模型(能理解“句子顺序”和“上下文”的神经网络架构)