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

C语言-结构

结构是一些值的集合,这些值称为成员变量,结构的每个成员可以是不同类型的变量

访问结构体成员变量的时候用点.来调用

struct Stu{//struct Stu是一个结构类型,类似于int char name[20]; int age; char tele[20]; char sex[20]; }; int main(){ struct Stu s={"张三",20,"16273847436","男"};//就相当于int a; printf("%s,%d,%s,%s\n",s.name,s.age,s.tele,s.sex); //打印出,张三,20,16273847436,男 return 0; }

嵌套结构如下

struct birthy{ int year; int month; int day; }; struct Stu{ char name[20]; int age; char tele[20]; char sex[20]; struct birthy b; }; int main(){ struct Stu s={"张三",20,"16273847436","男",{2002,12,12}};//这里的s叫做局部变量 printf("%s,%d,%s,%s,%d年%d月%d日\n", s.name,s.age,s.tele,s.sex,s.b.year,s.b.month,s.b.day); //打印出,张三,20,16273847436,男,2002年12月12日 return 0; }

结构的重命名

不重命名的话每次创建变量时候都要struct Stu s1,struct Stu s2
重命名的话创建变量的时候就不用加struct,直接Stus s1,Stus s2

//对类型进行重命名,把Stu改成Stus typedef struct Stu{ …… }Stus; struct Stu{ …… }s1,s2,s3;//声明类型的同时定义变量s1,s2,s3 //这里的s1,s2,s3叫全局变量

如果要封装一个打印结构体的函数的话,选print2好一点,因为函数传参的时候,参数是需要压栈的,如果传递一个结构体对象的时候,结构体过于大,参数压栈的系统开销较大,所以会导致性能下降,总之,结构体传参的时候,要传结构体的地址好一点

struct Stu{ char name[20]; int age; char tele[20]; char sex[20]; }; void print1(struct Stu temp){ printf("%s %d %s %s\n",temp.name,temp.age,temp.tele,temp.sex); } void print2(struct Stu *temp){ printf("%s %d %s %s\n",(*temp).name,(*temp).age,(*temp).tele,(*temp).sex); //上边这一行就等于这一行printf("%s %d %s %s\n",temp->name, temp->age, temp->tele, temp->sex); } int main(){ struct Stu s={"张三",20,"16273847436","男"}; print1(s);//传结构体 print2(&s);//传地址 return 0; }

匿名结构体

struct {
char name[20];
int age;
char tele[20];
char sex[20];
}s;
这个叫匿名结构体变量,声明匿名结构体的时候必须在后边紧跟着创建结构体变量,例如s

结构体的内存对齐

struct S1{ char c1; int a; char c2; }; struct S2{ char c1; char c2; int a; }; int main(){ struct S1 s1={0}; struct S2 s2={0}; printf("%d\n",sizeof(s1));//12 printf("%d\n",sizeof(s2));//8 return 0; }
http://www.jsqmd.com/news/1263176/

相关文章:

  • Buzz错误处理:优雅处理平台异常的最佳实践
  • SpringAI RAG架构:构建知识增强型AI应用实践
  • 如何一键捕获完整网页截图:Chrome全屏截图插件的终极指南
  • 贵阳黄金回收上门靠谱吗?看清覆盖范围与响应速度再预约 - 每日生活报
  • 编曲练习
  • 实捶了,原来库洛茶实为三代茶农世家 - 资讯纵览
  • RapidHash vs XXH3:实测对比!谁才是2025年最快哈希函数?
  • 深度学习中的嵌套结构:原理、问题与优化策略
  • 智能文档管理系统:NLP与机器学习实战解析
  • 生产案例-解冻支付功能-分布式数据一致性(分布式事务)
  • 终极暗黑破坏神2现代化指南:D2DX如何让你的经典游戏焕发新生
  • AI报警系统上线即崩?资深架构师凌晨三点手写排查清单(含Prometheus埋点模板、Kafka积压诊断命令、GPU显存泄漏定位法)
  • 河源古钱币回收哪里靠谱?2026本地正规门店推荐+收藏避坑指南 - 金奢汇
  • OmniVideo-R1:音视频深度融合的跨模态AI理解系统
  • Adrenaline vs Relay:为什么中小型项目更适合选择这款轻量级框架?
  • GEO-AI获客源头服务商重点推荐:南京微尚信息技术有限公司 - 速递信息
  • League Akari:3大核心功能重塑你的英雄联盟游戏体验
  • Java 转大模型开发:代码跑通了,权限却漏了?
  • AI大模型就业:从上线前检查开始讲
  • sysctl 设置随机端口 排除 指定的端口范围等
  • DevEco Code 让 AI 写 ArkTS,ForEach 漏 key、@State 不刷新、满屏 any:我立了 3 条冷门规矩治它
  • 揭秘BioEmu核心技术:DiG架构如何实现热力学系综的精准模拟?
  • 基于深度学习的交通标志识别系统开发实践
  • Jellium Desktop低光模式设置:夜间观看的护眼配置
  • AI模型评估体系构建与工程实践指南
  • 如何在5分钟内用AI智能背景移除插件打造专业直播画面
  • 大语言模型与Agentic AI在智能电网中的架构设计与应用实践
  • Azure Stack Hub 部署准备:DNS / 终结点 / Public IP / 边缘拓扑 / 身份 / Readiness / NTP
  • 如何轻松使用文件指纹技术:秒传链接提取脚本实用高效指南
  • 2026亲测:抖音去水印不留痕迹,高清视频图片一键保存教程 - 爱上科技热点