刚学链表的时候,遇到如 p->next 这样的指针操作就会很懵逼,甚至有的 p = p->next 就更头大了,为此不得不回去重新研究指针,才发现原来是结构体的锅
1、p->next 的理解
刚开始的时候对 p->next 这样的操作以为是指针 p指向了下一个节点。但其实是 p指向的结构体的next指针 指向了下一个节点。附上代码
普通的指针访问结构体成员代码
//定义一个结构体
struct Node
{
int a;
int b;
}Node;
struct Node *p; // 定义结构体指针
struct Node A{5, 10;} // 定义一个结构体A
int x;
p = &A; //令指针 p 指向 A
x = p->a //p->a即访问结构体A中的a变量并赋值给x
通过上面的例子可以发现,p->a 即是一种访问操作
指针访问结构体指针成员代码
struct Node
{
struct Node *next; //创建结构体的指针成员
}Node;
struct Node *p; //创建结构体指针
struct Node A; //创建结构体变量A
p = &A; //令指针p指向结构体变量A
p = p->next; //p访问A结构体的指针成员next获取地址并赋值给p
上段的代码通俗解释一下就是:结构体A中的指针 next存储有下一个节点的地址,p->next 访问后,成功获取next里的地址内容,将其赋值给p后,那么p拥有了next的地址,即p指向了下一个节点