2021.12.3 typedef和define区别

1. typedef和define定义

typedef:通俗话说就是给一个类型起一个别名,例如把猫叫一个咪咪,以后碰到咪咪就知道是猫,在程序中也一样,将int * 叫为INT,那么在以下的程序中,只要碰到INT就知道它是int*,其定义格式为:typedef    类型   别名;//注意结尾这个分号不能少。因此,上面的int*叫做INT可以表示为:  typedef  int*   INT;

2. define

这个是宏定义,比如,#define  pi  3.14 //注意这个后面是没有分号的,以下程序中只要有pi都是3.14,看着只是一个替换。

从他们的定义看,好像感觉他两是一回事,那么到底是不是一回事?我们可以看看下面这个代码?

2021.12.3 typedef和define区别

 这样定义一个变量时,他两意义是一样的,打印出来类型都是int *。

那如果两个变量放在一起定义呢?

2021.12.3 typedef和define区别

 一起定义两个变量时,注意宏和typedef的区别,上面程序中的Pint  和PINT在前面都是int*,但是打印出来的类型确实不同的。

3. 那么在结构体中是如何用typedef呢?

2021.12.3 typedef和define区别

 分析:将struct Student重新定义为Student,这样的话在C++主函数调用时直接用Student就可以,而且在上述的程序中,我们可以直接通过stu1.id直接去访问12345,然后去修改它,那么如果我想修改stu1中的姓名"caocao"改为"cao",也可以直接这样通过 . 吗?来试一下

2021.12.3 typedef和define区别

 这里直接报错,因此,我们在去修改字符串时,应该同数组那块一样,通过字符串拷贝函数strcpy_s,加头文件#include<string.h>,正确结果如下:

2021.12.3 typedef和define区别

 除了这种方式,还可以通过一个指针p去指向stu1,然后通过指针的方式去访问修改里面的元素,例如还是上面这个题,将其学号修改为54321,姓名修改为"cao",有

2021.12.3 typedef和define区别

显然,这样也是可以操作的,在这个中我们要注意 .name 前面的*p要带括号,因为 . 的优先级高于*,还可以通过如下 ->来打印:

2021.12.3 typedef和define区别

 注意:(1)结构体普通变量如何访问其成员:结构体中成员如果是字符串,不能用=去替换,必须得用字符串拷贝函数,strcpy_s()
(2)结构体指针变量如何访问其成员:可以通过->方式,(*p).name ==  p -> name  

               C语言自带解引用符号有:[ ], ->

上一篇:11月22日


下一篇:2021/11/22 结构体与共用体