当前位置:网站首页>结构体指针知识要点总结
结构体指针知识要点总结
2022-08-04 04:11:00 【BSP初级小学僧】
博客主页:https://blog.csdn.net/weixin_46094737?type=blog
欢迎评论留言 如有错误敬请指正!
本文由小学生廉原创,首发于 CSDN
未来很长,值得我们全力奔赴更美好的生活!
首先是typedef关键字的用法:
基本定义:
typedef为C语言的关键字,作用是为一种数据类型 定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。 在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。
用途一:与#define的区别
typedef 行为有点像 #define 宏,用其实际类型替代同义字。不同点是 typedef 在编译时被解释,因此让编译器来应付超越预处理器能力的文本替换。
用途二:减少错误
定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。
————————————————
版权声明:本文为CSDN博主「BSP初级小学僧」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_46094737/article/details/126136629
typedef struct //关键字typedef
{
int id;
int score;
}Stu_i;//爱称(相当于数据类型)
Stu_i stu01={2202,89},stu02;
另外typedef在使用时,可以省略结构体变量名,可以看到在这里我们是直接不写结构体变量名
typedef struct //关键字typedef
可以看到如果没有使用typedef关键字的时候,这个就是一个匿名结构体。
在不使用typedef关键字的时候,编译器会出现警告,只限于有单个结构体变量时,在出现多个结构体变量时,程序会直接报错,这里切记切记。
2、结构体指针的嵌套用法
typedef struct
{
int id;
char name[10];
bir *pbir;
}stu_i;
例如,要统计一个学生的信息,信息包含学号、名字和出生日期。但是出生日期又包含了年月日三个信息,一一声明当然也可以,这里使用指针嵌套的方法进行声明。
1、先声明一个带有指针的结构体,代码见上。
2、再声明一个出生日期的结构体
typedef struct
{
int year;
int month;
int day;
}bir;
3、将指针指向含有出生日期信息的变量地址
stu_i stu01=
{
.id=2022,
.name="夏洛特",
.pbir=&bir_test
};
4、初始化、然后打印。
源代码:
#include <stdio.h>
#include <string.h>
void struct_test(void);
int main()
{
struct_test();
return 0;
}
void struct_test(void)
{
typedef struct
{
int year;
int month;
int day;
}bir;
typedef struct
{
int id;
char name[10];
bir *pbir;
}stu_i;
bir bir_test=
{
.year=2022,
.month=7,
.day=25
};
stu_i stu01=
{
.id=2022,
.name="夏洛特",
.pbir=&bir_test
};
printf("%d\n",stu01.id);
printf("%s\n",stu01.name);
printf("%d-%d-%d",stu01.pbir->year,stu01.pbir->month,stu01.pbir->day);
}
运行结果:
边栏推荐
猜你喜欢
随机推荐
PHP高级开发案例(1):使用MYSQL语句跨表查询无法导出全部记录的解决方案
4路双向HDMI综合业务高清视频光端机8路HDMI高清视频光端机
Hey, I had another fight with HR in the small group!
new Date converts strings into date formats Compatible with IE, how ie8 converts strings into date formats through new Date, how to replace strings in js, and explain the replace() method in detail
基本表单验证流程
mysql索引笔记
烧录场景下开发如何进行源代码保密工作
数组相关 内容 解析
七夕节,我用代码制作了表白信封
什么是数字孪生智慧城市应用场景
高效IO模型
FFmpeg —— 通过修改yuv,将视频转为黑白并输出(附源码)
mq应用场景介绍
pnpm 是凭什么对 npm 和 yarn 降维打击的
小程序 + 电商,玩转新零售
4-way two-way HDMI integrated business high-definition video optical transceiver 8-way HDMI high-definition video optical transceiver
How to systematically plan and learn software testing?
Introduction to mq application scenarios
【源码】使用深度学习训练一个游戏
2 Gigabit Optical + 6 Gigabit Electric Rail Type Managed Industrial Ethernet Switch Supports X-Ring Redundant Ring One-key Ring Switch