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

时间:2019-05-12 20:20:13

标签: function loops linked-list nodes trace

我正在跟踪教授给出的链接列表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     
}

1 个答案:

答案 0 :(得分:1)

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

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

//没有空格? // ptr3现在是链接列表中的第一个元素

HTH!