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->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

 

————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/qq_63797077/article/details/128401049

 

此外以下内容为我个人观点

有一结构体数组

struct student
{    
    int id;
    char name[20];
    float score;
);
struct student stu[4],*p;

p=&stu[temp] //temp已定义 这里就不放了  直接说

printf("%d,%s,%4.1f",p->id,p->name,p->score);
其中p=&stu[temp] 比如temp是2 那么指向了结构体数组的元素第二个 也就是stu[2]
p->id,p->name,p->score呢 也是访问数组stu[2]的成员!
posted @ 2024-02-03 14:29  hack747  阅读(118)  评论(0编辑  收藏  举报