C语言笔记--结构体

结构体 struct

  • 结构体所占的空间,并不是简单的里面所包含的数据类型容量简单相加,因为存在对齐策略,会比预期要大
struct MyStruct //结构体名 { }; //注意一定要加;

这是基本格式,其余的见 笔记

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> struct student { int num; char name[20]; char sex; int age; float score; char daar[30]; }; //结构体类型声明,注意最后一定要加分号 int main(){ struct student s={1001,"lele",'M',20,98.5,"Shenzhen"};//结构体变量 //打印要一个一个来 printf("%d %s %c %d %5.2f %s\n",s.num,s.name,s.sex,s.age,s.score,s.daar); system("pause"); return 0; }

结构体数组

struct student sarr[3];//结构体数组 int i; //通过scanf for循环读取数据 for (int i = 0; i < 3; i++) { //sarr[i].name 因为struct里面char name[20];是字符数组,所以开始是起始地址 //不需要&sarr[i].name scanf("%d %s %c %d %f %s\n",&sarr[i].num,sarr[i].name,&sarr[i].sex,&sarr[i].age,&sarr[i].score,sarr[i].addr); } //打印输出来 for (int i = 0; i < 3; i++) { printf("%d %s %c %d %f %s\n",sarr[i].num,sarr[i].name,sarr[i].sex,sarr[i].age,sarr[i].score,sarr[i].addr); }

 

结构体指针

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> struct student { int num; char name[20]; char sex; }; int main(){ struct student s={1001,"wangle",'M'};//结构体变量 也可以再结构体定义的最后写 struct student* p;//结构体指针 p=&s; printf("%d %s %c\n",(*p).num,(*p).name,(*p).sex); //()用括号的原因是.优先级最高,p是指针,不能.name 只能->name 这样会报错 //也可与这样写 printf("%d %s %c\n",p->num,p->name,p->sex);//->用于指针的成员选择 struct student sarr[3]={1001,"lilei",'M',1005,"zhangsan",'M',1007,"lili",'F'}; p=sarr;//p存的就是sarr数组起始地址 int num=0; num=p->num++; printf("num=%d,p->num=%d\n",num,p->num); num=p++->num; printf("num=%d,p->num=%d\n",num,p->num); system("pause"); return 0; }

 

下面解释下:

num=p->num++; printf("num=%d,p->num=%d\n",num,p->num); num=p++->num; printf("num=%d,p->num=%d\n",num,p->num);

num=p->num++;  跟i++很像

先num=p->num 结果为1001  ,然后 p->num++   p这时候为1002 

num=p++->num; 

->优先级跟.一样比 ++高 

所以num=p->num  这时候p的地址上存的num 是上面的1002

再p++ 地址++ 变为下一个地址 指向1005

 

结构体typedef

typedef的作用就是起别名

定义方式:

typedf struct student { int num ; char name[20] ; char sex ; } stu , * pstu ;
  • stu 代表 struct student (给结构体类型起别名)

  • * pstu 代表 struct studen * (给结构体指针变量起别名)

  • typedef int INTEGER 起别名的作用在于代码即注释,比如size_t 这样可以快速知道作用

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> //给结构体类型起别名,叫stu,起了结构体指针类型的别名,叫pstu typedef struct student { int num; char name[20]; char sex; }stu,*pstu; //typedef _W64 unsigned int size_t; //size_t的定义 typedef int INEGER; //与size_t相似,起了个新类型INEGER int 型号 int main(){ stu s={1001,"wangle",'M'}; pstu p;//stu* p 就相当于一个结构体指针 INEGER i= 10; //等价与int i=10; p=&s;//p指向s的地址 printf("i=%d,p->num=%d\n",i,p->num); system("pause"); return 0; }

可以起别名,也可以直接当结构体使用

 


__EOF__

本文作者halfup
本文链接https://www.cnblogs.com/halfup/p/15815845.html
关于博主:编程小萌新一名,希望从今天开始慢慢提高,一步步走向技术的高峰!
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   halfup  阅读(166)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示