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

DAY16-结构体

一、结构体

1.定义结构体类型变量

一般形式:

struct 结构体名                                     结构体名:谷歌编程规范规定,首字母必须大写

{

      成员列表
}变量名表列                                                                     ;不能省略

eg:

struct Student
{int id;char name[100];float score;
}s;

2.结构体变量的引用

一般形式:

结构体变量名.成员名

eg:

Student.ld = 1

3.结构体变量的初始化

struct Student s = {1, "zhangsan", 99.7};

结构体的初始化顺序必须与声明的顺序保持一致 

4.结构体的嵌套

结构体的声明允许嵌套

(1)结构体的嵌套调用

struct Date
{int year;int month;int day;
}struct Student
{int id;char name[100];float score;struct Date Birthday;
};

(2)结构体的嵌套的引用

Student.birthday.year = 2003;

(3)结构体的嵌套的初始化

struct Student s = {1,"zhangsan",99.7,{2003,07,03},};

C99语法后可以进行部分初始化

struct Student s = {.ld = 1,.score = 99.7',{.month = 5,}};

5.结构体数组

struct Student a[3] = {{1, "zhangsan", 98.5},{2, "lisi", 97.5},{3, "wangwu",99.900},};

 6.指向结构体类型数据的指针

(1)定义

一个结构体变量的指针就是该变量所占据的内存段的起始地址。可以设一个指针变量,用来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址。指针变量也可以用来指向结构体数组中的元素。

以下为3种等价的书写方式:

①结构体变量名.成员名

②(*p).成员名

③p->成员名

(3)例题

 ①逆序
void swap(struct Student *a, struct Student *b)
{struct Student t = *a;*a = *b;*b = t;}void reverseStudent(struct Student *s, int len)
{int i;for(i = 0;i < len / 2;++i){swap(s + i, s + len - i - 1);}
}
②排序
int namecmp(struct Student *p1, struct Student *p2)
{return strcmp(p1->name, p2->name);
}int scorecmp(struct Student *p1, struct Student *p2)
{if((p1->score - p2->score) > 0){return 1;}else if((p1->score - p2->score) == 0){return 0;}else{return -1;}
}void sortStudent(struct Student *a, int len, int (*pfn)(struct Student *, struct Student *))
{int i, j;for(i = 0;i < len - 1;++i){for(j = i + 1;j < len;++j){if(pfn(a + i, a + j) > 0){swap(a + i, a + j);}}}
}

注:以上程序均无主函数。

7.结构体的存放规则

①默认按CPU位数对齐:(8字节最终大小必须是8的整数倍)

②在结构体成员中找出最长成员,最终按照该成员长度对齐

③按照结构体声明的顺序,依次将成员保存到结构体内存中,保存的偏移量  / sizeof(成员)== 0

eg:

struct Student
{int s;char a;short f;
};

 占8个字节

struct Student
{char a;int s;short f;
};

占12个字节

http://www.xdnf.cn/news/16797.html

相关文章:

  • linux如何将两份hdmi edid合并
  • system.conf linux用于启动和管理系统进程的初始化系统和服务管理器的配置文件
  • WEditor:高效的移动端UI自动化脚本可视化编辑器
  • 【云故事探索】NO.16:阿里云弹性计算加速精准学 AI 教育普惠落地
  • 力扣 Pandas 挑战(6)---数据合并
  • 基于SpringBoot和SpringAI框架实践
  • Google政策大更新:影响金融,Ai应用,社交,新闻等所有类别App
  • 【科研绘图系列】R语言绘制线性相关性
  • 算法训练营day37 动态规划⑤ 完全背包 518. 零钱兑换 II、 377. 组合总和 Ⅳ、70. 爬楼梯 (进阶)
  • 排序的演进:从机械齿轮到领域专用芯片加速器的全面综述
  • 最新PS 2025安装包下载与安装教程(Adobe Photoshop 2025 )
  • 【数据结构初阶】--二叉树(六)
  • 乱删文件,电脑不能开机,怎么办
  • 【C语言】深度剖析指针(三):回调机制、通用排序与数组指针逻辑
  • DeepSeek笔记(三):结合Flask实现以WEB方式访问本地部署的DeepSeek-R1模型
  • opencv解迷宫
  • 是德科技的BenchVue和纳米软件的ATECLOUD有哪些区别?
  • RabbitMQ 的死信队列完整指南 (With Spring Boot)
  • 【13】大恒相机SDK C#开发 —— Fom1中实时处理的8个图像 实时显示在Form2界面的 pictureBox中
  • 多架构镜像整合全攻略:在Docker中实现单一镜像支持同时支持amd64和arm64架构
  • 贝锐蒲公英X4 Pro 5G新品路由器:异地组网+8网口+双频WiFi全都有
  • 网站域名备案和服务器有关系吗
  • 【源力觉醒 创作者计划】文心大模型开源:从封闭研发到生态共建的转折点
  • 设计模式:命令模式 Command
  • 【Java23种设计模式】:模板方法模式
  • Windows 11下IDEA中使用git突然变得卡慢及解决办法
  • UI测试平台TestComplete如何实现从Git到Jenkins的持续测试
  • 【AI大模型】披着羊皮的狼--自动化生成越狱提示的系统(ReNeLLM)
  • thinkphp3.2 中使用redis
  • Linux应用开发基础知识——Makefile初级教程(九)