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