很多小伙伴知道 typedef int a;的作用相当于将int 换名为a;
也知道typedef struct node{xxx}b;的意思是将这个结构体命名为b;但是对于这样的代码
typedef struct Node
{
int value1;
int value2;
}*p,a;
确不知道这两个表示的什么。首先我们先明确一个typedef最基本的定义
typedef int a,b;
上述语句是将a和b同时作为int的名字替换。也就是说我们既可以用a代表int也可以用b代表int。
再看看我们以前对于指针的定义:
int* a,b;
这个语句的意思大家知道吧?是定义一个int*型变量a,定义一个int型变量b;仔细思考一下为什么b定义的是个int类型呢,是因为这个语句也可以等价于如下的语句:
int* a;
int b;
也就是说*号是与a作结合的,b不在这个星号的作用域之内。好了,明确了这两点,我们再回过头来看看最开始的问题
typedef struct Node
{
int value1;
int value2;
}*p,a;
这个代码是什么意思呢?中间的{}我们先把他遮住,再把这个代码拆开,也就变成了这样
typedef struct Node *p;
typedef struct Node a;
也就是说我们将 struct Node*这个结构体指针类型换名为p,将struct Node 这个结构体换名为a;
这时候我们就可以进行如下操作了:
p sp;//sp是个结构体指针类型
a s;//s是个结构体类型
sp->value1 = 3;//结构体指针使用间接引用
s.value1 = 2;//结构体使用直接饮用
这下大家明白了吧?顺便提醒一下直接执行sp->value1 = 3;这个操作程序会出现错误,因为你并没有给指针分配空间对吧?如果这个不了解的话可以看看这个博客:
指针能不能不分配空间直接使用?