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