结构体的学习

news/2024/10/18 2:34:08/

结构体与共用体,枚举

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.ppmy.cn/news/1341729.html

相关文章

02 使用jdk运行第一个java程序:HelloWorld

使用jdk运行第一个java程序 1 HelloWorld小案例1.1 编写流程1.2 错误示例 首先在CMD命令行里面&#xff0c;使用javac xxxx.java&#xff0c; 进行编译&#xff0c;其中会有报错&#xff1b; 然后生成xxxx.class 文件&#xff0c;然后使用java xxxx.class 进行运行。 1 HelloWo…

gRPC使用详解

起源特点主要优缺点应用场景组成部分使用方法SpringBoot集成gRPCVert.x集成gRPCNacos集成gRPC监控gRPC调用过程Java使用示例 起源 gRPC的起源可以追溯到2015年&#xff0c;当时谷歌发布了一款开源RPC框架&#xff0c;名为gRPC。gRPC的设计初衷是为了提供一种标准化、可通用和跨…

记录解决报错--vue前后端分离,接口401(Unauthorized)

1.场景 前端访问不了后端接口。报错401。 2.解决步骤 ①在页面console.log(111)查看走到代码的位置没有。&#xff08;走到了&#xff0c;没问题&#xff09; ②查看vue.config.js配置。这段配置就是vue访问api的url。&#xff08;没问题&#xff09; devServer: {port: 80…

[每周一更]-(第86期):NLP-实战操作-文本分类

NLP文本分类的应用场景 医疗领域 - 病历自动摘要&#xff1a; 应用&#xff1a; 利用NLP技术从医疗文档中自动生成病历摘要&#xff0c;以帮助医生更快速地了解患者的状况。 法律领域 - 法律文件分类&#xff1a; 应用&#xff1a; 使用文本分类技术自动分类法律文件&#xf…

openssl3.2 - .pod文件的查看方法

文章目录 .pod文件的查看方法概述笔记初步的解决方法备注 - pod2html.bat的详细用法好像Perl就自带这个BATEND .pod文件的查看方法 概述 看到openssl源码目录下有很多.pod文件, 软件发布的帮助内容都在里面. 当make install后, 大部分的.pod都会转成html文件, 但是有一部分…

图解Vue组件通讯【一图胜千言】

Vue的每个组件都有独自的作用域&#xff0c;组件间的数据是无法共享的&#xff0c;但实际开发工作中我们常常需要让组件之间共享数据&#xff0c;今天我们来学习下面三种组件通信方式&#xff1a; 父子组件之间的通信 兄弟组件之间的通信 祖先与后代组件之间的通信 1. 父子组件…

微软Office Plus与WPS Office的较量:办公软件市场将迎来巨变?

微软Office Plus在功能表现上远超WPS Office&#xff1f; 微软出品的Office套件实力强劲&#xff0c;其不仅在办公场景中扮演着不可或缺的角色&#xff0c;为用户带来高效便捷的体验&#xff0c;而且在娱乐生活管理等多元领域中同样展现出了卓越的应用价值 作为中国本土办公软…

浅析Redis③:命令处理之数据返回Client(下)

写在前面 Redis作为我们日常工作中最常使用的缓存数据库&#xff0c;其重要性不言而喻&#xff0c;作为普通开发者&#xff0c;我们在日常开发中使用Redis&#xff0c;主要聚焦于Redis的基层数据结构的命令使用&#xff0c;很少会有人对Redis的内部实现机制进行了解&#xff0c…