用typedef 给某一类型的指针定义一个别名
首先要了解typedef关键字是用来给数据类型定义一个别名,然后即可利用这个别名去定义变量,typedef关键字的作用请参考https://blog.51cto.com/peacefulmind/1141506
如代码:
typedef int zhengshu;
typedef int *zhengshuzhizhen;
这样定义之后,就可以用zhengshu
去定义int
类型的变量以及用zhengshuzhizhen
去定义int
型指针了,如下:
zhengshu x=1;
zhengshuzhizhen p;
这两句代码就等价于下面代码:
int x=1;
int *p;
敲黑板,重点在这
一定要注意这个别名是zhengshuzhizhen
而非*zhengshuzhizhen
,否则不就应该理解成是给int
型定义了一个别名叫*zhengshuzhizhen
?笔者试图说服自己努力的想了很多种理解方式去对接上正确的结果,那到底应怎样理解呢?绝不能死记硬背,这是自己学数据结构的底线😄
经查阅资料这样理解比较好:
第一种理解方式:
所有指针定义的语句中的“*”号都只是一个指针类型说明符,而非间接寻址运算符(这一点在C语言书中是明确指出的),所以从我们编程者的角度去理解指针定义的代码语句都应从后往前去读,如代码:
int *pa;
我们可以从后往前将该语句读为:pa是一个指针变量,它指向一个整型变量。
再如代码:
typedef int *zhengshuzhizhen;
我们可以从后往前将该语句读为:将zhengshuzhizhen定义为整形指针类型的别名,因此,便可用zhengshuzhizhen作为整形指针类型去定义指向整型变量的指针了。
第二种理解方式:
给int *
定义了新别名zhengshuzhizhen
。
如果去这样理解的话,那倒是使得好多疑惑都迎刃而解了。比如,int *
才表示是指针类型,定义一个整型指针时即可写为:
int *pa
这种与定义一个int型变量的理解方式一样,定义int型变量的代码为:int a;表示int
是数据类型,a即为定义的int
型的变量;
而指针定义的代码就理解为int *
是数据类型,pa是定义的int *
型的变量。
那给整型指针定义一个别名的写法,以及用法也就很好理解了:
typedef int *zhengshuzhizhen;
理解就是:给int *
定义了新别名zhengshuzhizhen
。
欢迎你们给出更好的理解方式,或者指出我的这种理解方式对还是不对,共同努力💪