终极免费按键映射指南:如何用QKeyMapper实现Windows游戏手柄键盘鼠标全能映射
2026/7/25 17:48:13
接下来,让我们来到结构体的世界,当然关于结构体位段以及其余的相关知识,请关注我,可以了解后续,下面的是与程序学习相关的其它博客,有需要的可以点击,即可跳转对应博客
前面我们在学习操作符的时候,已经学习了结构体的知识,这里稍微复习一下
结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同的类型的变量
structtag{member-list;}variable-list;当我们来描述一个学生时:
typedefstructStu{charname[20];//名字intage;//年龄charsex[5];//性别charid[20];//学号}Stu;//分号不能丢#include<stdio.h>structStu{charname[20];//名字intage;//年龄charsex[5];//性别charid[20];//学号};intmain(){//按照结构体成员的顺序初始化structStus={"张三",20,"男","20230818001"};printf("name: %s\n",s.name);printf("age : %d\n",s.age);printf("sex : %s\n",s.sex);printf("id : %s\n",s.id);//按照指定的顺序初始化structStus2={.age=18,.name="lisi",.id="20230818002",.sex="女"};printf("name: %s\n",s2.name);printf("age : %d\n",s2.age);printf("sex : %s\n",s2.sex);printf("id : %s\n",s2.id);return0;}声明结构的时候,可以不完全的声明
//匿名结构体struct{inta;charb;floatc;}x;struct{inta;charb;floatc;}a[20],*p;但这里,我们可以想想,如果:
p=&x;//可以完成赋值嘛?structNode{intdata;structNodenext;};structNode{intdata;structNode*next;};假如,结构体自引用的时候,加载了typedef对匿名结构体类型的重命名,可以运行看看是否可行呢:
typedefstruct{intdata;Node*next;}Node;typedefstructNode{intdata;structNode*next;}Node;通过点操作符(.)和(->)进行访问
structStu{charname[20];intage;};structStus;//访问s的成员intmain(){strcpy(s.name,"zhangsan");s.age=20;}structStu{charname[20];intage;};voidprint(structStu*ps){printf("name = %s age = %d\n",(*ps).name,(*ps).age);//使用结构体指针访问指向对象的成员printf("name = %s age = %d\n",ps->name,ps->age);}intmain(){structStus={"zhangsan",20};print(&s);//结构体地址传参return0;}structS{intdata[1000];intnum;};structSs={{1,2,3,4},1000};//结构体传参voidprint1(structSs){printf("%d\n",s.num);}//结构体地址传参voidprint2(structS*ps){printf("%d\n",ps->num);}intmain(){print1(s);//传结构体print2(&s);//传地址return0;}