结构体的学习

结构体与共用体,枚举

1.数据类型复习:

2结构体.

eg;统计全校同学信息    需要记录的点--- 姓名,班级,性别,成绩,年龄
        统计名字:char s[ ] [ 100 ] = { "Tmo" }
        统计班级:int ; 统计性别: char     ;  统计成绩 : float   ; 统计年龄: int
一个人的相关信息要用到5个数组,想有一种数据可以描述一个人的相关信息,就可以用结构体:

结构体:struct
描述一些原先基本数据类型不好描述的,复杂的数据类型
语法:struct + 结构体类型名
          {       
          };            //定义了一个“数据类型”   --  用户自定义的数据类型
eg:描述学生的个人信息----
struct  student                 
{
      char  name[20];       //放名字
      unsigned  char  age;    //放年龄
      等 - - - 
};
于是乎: struct student  s   ------   学生这种数据类型(等价于基本类型的种类),定义了一个s变量            按照给的类型顺序来用   struct student  s = {"Tom",20,59.5,110}  ---  名字,年纪,成绩,

注意:1.结构体 - 用来实现自定义的数据类型
           2.用结构体 : 先构造数据类型,用数据类型定义i变量,数组,指针等

访问结构体:  .  //结构体成员运算符
打印输出: printf("%d",  s . 定义的数据类型中的名字(如 name,aage))         
eg;printf(”%d“,s.name)

-> : 指向结构体成员

3.结构体的对齐规则:
1.在32位的平台上,默认都是按4字节对齐的。
2.对于成员变量,各自在自己的自然边界上对齐。
3.如果 成员变量中有比4字节大。此时整个结构体按照4字节对齐。(64位默认为8字节)
4.如果成员变量中没有有比4字节大。
此时整个结构体按照最大的那个成员对齐。


相关程序实现

1.编写一个“老师”的结构体,写出一个输入、输出的函数,打印出来

struct teacher
{char name[20];int tno;float salary;
};void printfteacher(struct teacher *t)
{printf("name   = %s\n",t-> name);printf("tno    = %d\n",t-> tno);printf("salary = %2.f\n",t-> salary);}void inputteacher(struct teacher *t)
{printf("name :");scanf("%s",t->name);printf("tno :");scanf("%d",&t->tno);printf("salary :");scanf("%f",&t->salary);
}int main(void)
{struct teacher t={0};inputteacher(&t);printfteacher(&t);}

2.编写一个学生的结构体,编写输入输出函数,找到最大成绩的学生打印信息,以学生成绩做一个排序

struct student
{char name[20];int sno;float score;
};void printfstudent(struct student *t,int len)
{int i;printf("name\tsno\tscore\t\n");for(i=0;i<len;i++){printf("%s\t",(t+i)->name);printf("%d\t",(t+i)->sno);printf("%.2f\t\n",(t+i)->score);}
}void inputstudent(struct student *t,int len)
{int i;for(i=0;i<len;i++){printf("name :");scanf("%s",(t+i)->name);printf("sno :");scanf("%d",&(t+i)->sno);printf("score :");scanf("%f",&(t+i)->score);}}
void maxstudent(struct student *t,int len)
{int i=0;float max=t->score;int j=0;for(i=0;i<len;i++){if(max<(t+i)->score){max=(t+i)->score;j=i;}}printf("max = %s %d %.2f\n",(t+j)->name,(t+j)->sno,(t+j)->score);
}int compare(const void *a,const void *b)
{const struct student *p1=a;const struct student *p2=b;return p1->score - p2->score;
}int main(void)
{struct student s[3]={0};inputstudent(s,3);maxstudent(s,3);qsort(s,3,sizeof(struct student),compare);printfstudent(s,3);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/444081.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

41、WEB攻防——通用漏洞XMLXXE无回显DTD实体伪协议代码审计

文章目录 XXE原理&探针&利用XXE读取文件XXE带外测试XXE实体引用XXE挖掘XXE修复 参考资料&#xff1a;CTF XXE XXE原理&探针&利用 XXE用到的重点知识是XML&#xff0c;XML被设计为传输和存储数据&#xff0c;XML文档结构包括XML声明、DTD文档类型定义&#xf…

【MySQL】学习并使用聚合函数和DQL进行分组查询

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-t8K8tl6eNwqdFmcD {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

网络层 IP协议(1)

前置知识 主机:配有IP地址,但是不进行路由控制的设备 路由器:既配置了IP地址,又能进行路由控制的设备 节点:主机和路由器的总称 IP协议主要完成的任务就是 地址管理和路由选择 地址管理:使用一套地址体系,将网络设备的地址描述出来 路由选择:一个数据报如何从源地址到目的地址 …

开发数据产品+AI产品通关上岸课程

该课程全面解析数据产品和人工智能产品的开发与设计。学员将学习产品规划、数据分析以及AI技术应用&#xff0c;通过案例实践掌握产品开发流程&#xff0c;致力于帮助他们成功进入数据和人工智能产品领域。 课程大小&#xff1a;9.8G 课程下载&#xff1a;https://download.cs…

HarmonyOS4.0系统性深入开发33相对布局(RelativeContainer)

相对布局&#xff08;RelativeContainer&#xff09; 概述 RelativeContainer为采用相对布局的容器&#xff0c;支持容器内部的子元素设置相对位置关系。子元素支持指定兄弟元素作为锚点&#xff0c;也支持指定父容器作为锚点&#xff0c;基于锚点做相对位置布局。下图是一个…

Django模型(七)

一、聚合与分组查询 1.1、准备数据 class Cook(models.Model):"""厨师"""name = models.CharField(max_length=32,verbose_name=厨师名)level = models.IntegerField(verbose_name=厨艺等级)age = models.IntegerField(verbose_name=年龄)sect …

虹科方案|释放总线潜力:汽车总线离线模拟解决方案

导读&#xff1a;传统的ECU模拟工具通常需要依赖上位机软件来发起通信&#xff0c;这在离线场景和自动化产线中带来不便。为了应对这一挑战&#xff0c;虹科推出了创新的汽车总线离线模拟解决方案&#xff0c;基于PCAN-Router系列网关&#xff0c;通过内部可编程固件&#xff0…

Kotlin 协程:用源码来理解 ‘viewModelScope‘

Kotlin 协程&#xff1a;用源码来理解 ‘viewModelScope’ Kotlin 协程是 Kotlin 语言的一大特色&#xff0c;它让异步编程变得更简单。在 Android 开发中&#xff0c;我们经常需要在后台线程执行耗时操作&#xff0c;例如网络请求或数据库查询&#xff0c;然后在主线程更新 UI…

RS485自动收发电路震荡的问题

电路 设计初衷 电源5V 选择5V的原因&#xff0c;差分2.5V比1.5V可以提高传输能力 TTL输入 3.3V电平满足需求 TTL输出 4.5V了&#xff0c;MCU是3.3V平台 这样就分为两种情况 MCU接收端可以容忍5V输入 MCU接收端不可以容忍5V输入&#xff0c;就要进行电压转换&#xff0c;我这里使…

AlmaLinux上安装Docker

AlmaLinux上安装Docker 文章目录 AlmaLinux上安装Docker一、前言二、具体步骤1、Docker 下载更新系统包索引&#xff1a;添加Docker仓库&#xff1a;安装Docker引擎&#xff1a; 2、Docker服务启动启动Docker服务&#xff1a;设置Docker开机自启&#xff1a; 3、Docker 安装验证…

go语言函数进阶

1.变量作用域 全局变量 全局变量是定义在函数外部的变量&#xff0c;它在程序整个运行周期内都有效。 在函数中可以访问到全局变量。 package mainimport "fmt"//定义全局变量num var num int64 10func testGlobalVar() {fmt.Printf("num%d\n", num) /…

fastadmin后台自定义按钮和弹窗

工具栏自定义按钮-ajax请求 前端代码 1.在对应模块的模板文件index.html添加自定义按钮&#xff0c;注意按钮要添加id以绑定点击事件 <div class"panel panel-default panel-intro">{:build_heading()}<div class"panel-body"><div id&qu…