我的 C 代码跟踪和输出不同,但我不确定为什么?

My C code tracing and output is different but I am not sure why?

我正在跟踪我的教授给出的链表 C 代码,但我不确定它是如何工作的。第一部分最让我困惑。我认为 head 是 4,因为 temp 是 0,head+temp 是 4。但是,ptr 是 5 而不是 4。谁能解释发生了什么? 除了代码,我把实际输出放在评论中。

#include <stdio.h>
#include <stdlib.h>
struct node
{
    int info;
    struct node *next;
};
typedef struct node node;
int func1 (node *head)
{
    int temp = 0;
    while (head !=NULL) 
    {
        temp = temp + head -> info;
        head = head->next;
    }
    return(temp);
}
int main() 
{
    node *ptr,*ptr2,*ptr3; //ptr ptr2 ptr3 

    ptr = (node*)malloc(sizeof(node));
    ptr->info = 4;//what is this??
    ptr2 = (node*)malloc(sizeof(node));
    ptr->next = ptr2;
    ptr2->next = NULL;
    ptr->next->info = 1;//5 1 <-actual list //what happened to 4?? 

    printf("ptr2 %d\n",func1(ptr2));//1 
    printf("ptr %d\n",func1(ptr));//5 

    ptr3 = (node*)malloc(sizeof(node));//5 1 _ 
    ptr3->next = ptr;//5 1 _ ? //but there's no space for ptr3->next??

    ptr3->info = 2;//5 1 7 <-actual list
    printf("ptr3 %d\n",func1(ptr3));//7 

    ptr2->info = 8;//12 8 14 <-actual list
    printf("ptr3 %d\n",func1(ptr3));//14 

    ptr->info = 16;//24 8 26 <-actual list
    printf("ptr2 %d\n",func1(ptr));//24     
}

添加了评论,但它对我来说似乎有意义?

ptr = (node*)malloc(sizeof(node));
ptr->info = 4;//what is this??

// 4 是您要放入此节点的值

ptr2 = (node*)malloc(sizeof(node));
ptr->next = ptr2;
ptr2->next = NULL;

// ptr 是链表中的第一个元素,ptr2 现在是第二个

ptr->next->info = 1;//5 1 <-actual list //what happened to 4?? 

//给ptr->next赋值,即ptr2-4在第一个节点中原封不动

printf("ptr2 %d\n",func1(ptr2));//1 

// 1 有意义,因为 ptr2 是链表中的最后一个元素

printf("ptr %d\n",func1(ptr));//5 

// 5 有意义,因为 ptr 是第一个元素

ptr3 = (node*)malloc(sizeof(node));//5 1 _ 
ptr3->next = ptr;//5 1 _ ? //but there's no space for ptr3->next??

//没有space? // ptr3 现在是链表中的第一个元素

HTH!