C语言“->“和“p->next“的理解

这是对"->"的理解

在c语言中,"->"是结构体指针的运算符.它允许你通过指向结构体的指针来访问结构体中的成员.

例如,以下定义了一个student类的结构体,其中包含两个字符串类型的成员:"name","id",以及一个整形成员"age",可以使用如下方式访问结构体成员:


struct student
{
    char name[10];
    char id[10];
    int age;
};//定义了一个结构体
struct student s;
// C 库函数 例如:char *strcpy(char *dest, const char *src) 把 src 所指向的字符串复制到 dest.
strcpy(s.name,"John"); //赋值操作
strcpy(s.id,"12345");
s.age = 20;

但是如果你有一个指向结构体"student"的指针"p",你可以使用"->"运算符来访问结构体成员,如下


//定义一个结构体指针"p"
struct student *p;
//将"p"指向结构体s的地址
p = &s;
//使用"p->name"访问结构体"s"中的"name"成员
strcpy(p->name, "Jane");
//使用"p->id"访问结构体"s"中的"id"成员
strcpy(p->id, "54321");
//使用"p->age"访问结构体"s"中的"age"成员
p-age = 25;

总的来说,"->"运算符允许你通过指向结构体的指针来访问结构体中的成员,而不必先将指针取值(即使用"*"运算符).例如,你可以使用"p->age"来访问结构体中的"age"成员,而不必使用"(*p).age"的形式。

接下来是对p->next的理解

"p"是指向结构体的指针,并且这个结构体中有个名为"next"的指针成员时,"p = p ->next"意味着将"p"指向下一个结构体的地址.

这种情况通常用于遍历链表.例如,假设你有一个链表,其中每个节点都是结构体"node",其中包含一个整形成员"data"和一个指向结构体"node"的指针成员"next".你可以使用如下的代码来遍历这个链表:


struct node {
    int data;
    struct node *next;
};
struct node n1,n2,n3;
//定义三个结构体变量,"n1","n2","n3",把他们链接成为一个链表
n1.data = 1;
n1.next = &n2;
// "n1.next"指向"n3"
n2.data = 2;
n2.next = &n3;
// "n2.next"指向"n2"
n3.data = 3;
n3.next = NULL;
// "n3.next"指向"NULL",表示链表的结尾
struct node *p;
p = &n1;
//定义一个指向结构体"node"的指针"p",并将它指向链表的第一个节点"n1"
while (p != NULL) {
    printf("%d\n",p->data);
    p = p->next;
}
//使用while循环遍历整个链表
//输出结果是:
//1
//2
//3

你可能感兴趣的:(数据结构,c语言,数据结构,链表)