Трассировка и вывод моего кода C отличается, но я не уверен, почему? - PullRequest
0 голосов
/ 12 мая 2019

Я отслеживаю код 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 Ответ

1 голос
/ 12 мая 2019

Добавлены комментарии, но мне кажется, что это имеет смысл?

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!

...