这段代码有什么问题?这只是创建一个链接列表并打印它。
#include<stdio.h>
#include<stdlib.h>
struct node{
struct node *next;
int data;
};
void printLinklist(struct node *head)
{
struct node *temp = head;
while(temp != NULL)
{
printf("%d\t",temp->data);
temp = temp->next;
}
printf("\n");
}
void pushData(struct node *head, int val)
{
struct node *temp = malloc(sizeof (struct node));
temp->next = head;
temp->data = val;
head = temp;
}
int main()
{
struct node *head = NULL;
pushData(head, 1);
pushData(head, 2);
pushData(head, 3);
pushData(head, 4);
pushData(head, 5);
printLinklist(head);
}
我知道这样做的正确方法。为此我们必须在pushData()函数中传递&amp; head并将此函数的参数定义为双指针(在pushData()函数中将head替换为* head并将&amp; head作为参数传递)
我无法理解此代码中的问题。
答案 0 :(得分:3)
参数总是passed by value
。调用pushData()
时,head
的值(即存储在指针变量中的地址)将复制到函数的局部变量head
中。更改此设置不会更改head
函数中的main()
变量。
如果您需要这样做,则必须通过&head
,然后通过在pushData()
函数中取消引用来分配值。
答案 1 :(得分:1)
问题是您在NULL
中将head
分配给main()
,而且从不会发生任何问题,它可以像这样工作
struct node *pushData(struct node *head, int val)
{
struct node *temp = malloc(sizeof (struct node));
if (temp == NULL)
return NULL;
temp->next = head;
temp->data = val;
return temp;
}
并在主
int main()
{
struct node *head;
head = pushData(head, 1);
head = pushData(head, 2);
head = pushData(head, 3);
head = pushData(head, 4);
head = pushData(head, 5);
printLinklist(head);
}
传递指针只会修改指针指向的数据,而不是指针本身。
因此,在pushData()
函数中,您可以执行此操作
head = temp;
更改本地指针,并使其指向temp,但一旦函数返回,更改就会丢失。
当您传递head
的地址&head
时,您可以更改指针,因为您的head
指针将指向指针本身,而不是指针指向的数据到。
答案 2 :(得分:0)
真正的代码是:
#include <stdio.h>
#include <stdlib.h>
#pragma warning(disable:4996)
struct node {
struct node* next;
int data;
};
void printLinklist(struct node* head)
{
struct node* temp = head;
while (temp->next != NULL)
{
printf("%d\t", temp->data);
temp = temp->next;
}
printf("\n");
}
struct node* pushData(struct node* head, int val)
{
struct node* temp = malloc(sizeof(struct node));
if (temp == NULL)
return NULL;
temp->next = head;
temp->data = val;
return temp;
}
int main()
{
struct node* head = malloc(sizeof(struct node));
head = pushData(head, 1);
head = pushData(head, 2);
head = pushData(head, 3);
head = pushData(head, 4);
head = pushData(head, 5);
struct node* head2 = head;
for (int i = 0; i < 5; i++)
{
head2 = head2->next;
}
head2->next = NULL;
printLinklist(head);
}