C 语言中的链接列表,代码行说明



我刚刚开始学习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;
}

什么是临时>数据,它是指针吗? 变量?

好吧,让我们分解一下:

  1. 什么是温度?它被声明为

    struct test_struct* temp = ...
    

    所以我们知道它是指向struct test_struct的指针。

  2. 什么是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 的结构的指针,该结构具有名为 datanext 的成员。这两个语句在 temp 指向的结构中为这两个成员赋值。

由于head在代码中被设置为NULL,因此第二个语句确实将next成员设置为NULL

从技术上讲,temp->datatemp->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;
}

相关内容

  • 没有找到相关文章