我刚刚开始学习c中的链表。我仍然混淆了代码中的第 1 行。1. 什么是临时>数据,它是指针吗?变量?2.什么是临时>下一个=头,这里头有空值????如果是这样,则 temp->next 变为 NULL 现在???真的搞砸了这条线,请帮帮我。谢谢
#include <stdio.h>
#include <stdlib.h>
struct test_struct{
int data;
struct test_struct *next;
};
struct test_struct* head=NULL;
int main()
{
head = NULL;
struct test_struct* temp = (struct test_struct*)malloc(sizeof(struct test_struct));
if(NULL==temp)
{
printf("error in memory");
return 0;
}
temp->data=5; // line 1 <---------- what's going on
temp->next=head; // line 2 <---------- what's going on here?
head=temp;
printf("%pn",head);
return 0;
}
什么是临时>数据,它是指针吗? 变量?
好吧,让我们分解一下:
-
什么是温度?它被声明为
struct test_struct* temp = ...
所以我们知道它是指向
struct test_struct
的指针。 -
什么是
temp->data
?这意味着跟随(取消引用)指针,并获取调用数据的成员。您的test_struct声明为struct test_struct { int data; struct test_struct *next; };
所以,我们知道它有一个名为 data 的整数成员。
temp->data
是对该整数的引用。
什么是 temp->next=head,这里的 head 具有 NULL 值????如果是这样,temp->next 现在变为 NULL ???
此代码将 NULL 分配给指针temp->next
。
如果你对这些东西感到困惑,学习在调试器中单步执行它可能会有所帮助(就像一本好书一样)。
->
运算符跟随指向结构的指针来引用结构的元素之一。在这种情况下:
temp->data = 5;
temp->next = head;
temp
是指向类型 struct test_struct
的结构的指针,该结构具有名为 data
和 next
的成员。这两个语句在 temp
指向的结构中为这两个成员赋值。
由于head
在代码中被设置为NULL
,因此第二个语句确实将next
成员设置为NULL
。
从技术上讲,temp->data
和temp->next
中的每一个都是左值(发音为"ell value"),这意味着它们既可以用于它们引用的值,也可以用于存储值的位置。"l"代表"左",作为一个助记符,表明这些东西是你在赋值语句左侧拥有的东西。
您的代码的作用是创建一个变量名称"temp",这是一种test_struct*。 然后,它分配内存并将变量 temp 指向该内存片段。此 temp 变量是一个指针,指向您使用 malloc 创建的内存片段。在"temp"中,它有两个变量名数据和下一个。在 C 中,要访问成员,请使用 ->运算符。(第 1 行)您将整数 5 保存到 temp 中的数据变量中,您将 NULL 分配给下一个(此时您的头部为空[得到它!您的头部为 null :)])。然后你把头指向Temp所指的记忆片段。现在,如果您打印f("%d",头>数据),它将打印5。
我注释了代码中的每一行。希望这有帮助。
#include <stdio.h>
#include <stdlib.h>
struct test_struct{
int data;
struct test_struct *next;
};
struct test_struct* head = NULL; //Creates a global variable head. its type is test_struct* and it is currently set to NULL
int main(){
head = NULL; //
struct test_struct* temp = (struct test_struct*)malloc(sizeof(struct test_struct));// creates a variable named temp which is a test_struct* type.
if(NULL==temp){ //at this point if temp is NULL, it imply that above line failed to allocate memory so there is no point executing this program so we return.
printf("error in memory");
return 0;
}
temp->data=5; // in the structure test_struct there is a member variable data inside it and since the temp variable is of type test_struct, temp also has data member. so we can access it by using -> operator. since data is a integer type we can assign a number to it.
temp->next=head; //At this point head is NULL. So we are pretty much assigning NULL to temp->next
head=temp; //When using link list we usually keep the head pointing to the beginning of the link list.(unless its a circular link list). This line does the exact same. It points the dead to memory piece that temp pointing to.
printf("%pn",head);
return 0;
}