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->id,p->name,p->score呢 也是访问数组stu[2]的成员!