链表不通过函数修改(C编程)
我有以下代码:链表不通过函数修改(C编程),c,linked-list,C,Linked List,我有以下代码: #include <stdio.h> #include <stdlib.h> struct node { int value; struct node* next; }; typedef struct node Sequence; Sequence* init() { Sequence* s = NULL; return s; } void insertFirstElement(Sequence* s, int
#include <stdio.h>
#include <stdlib.h>
struct node {
int value;
struct node* next;
};
typedef struct node Sequence;
Sequence* init() {
Sequence* s = NULL;
return s;
}
void insertFirstElement(Sequence* s, int e) {
if (s == NULL) {
s = (Sequence*)malloc(sizeof(Sequence));
s->value = e;
s->next = NULL;
return;
}
}
int main(int argc, const char * argv[]) {
Sequence* s = NULL;
s = (Sequence*)malloc(sizeof(Sequence));
s->value = 5;
s->next = NULL;
if (s == NULL) {
printf("Doesn't work!\n");
}
else {
printf("It works!\n");
}
Sequence* s2 = init();
insertFirstElement(s2, 5);
if (s2 == NULL) {
printf("Doesn't work!\n");
}
else {
printf("It works!\n");
}
return 0;
}
所以我不明白为什么我不能通过'insertFirstElement'函数修改我的链表。为什么函数调用后不更新“序列”?为什么它仍然是空的?有人能帮我吗
提前感谢。在线
s = (Sequence*)malloc(sizeof(Sequence));
用新序列替换给定的序列。接收指向序列的地址,然后用指向新序列的新地址替换该地址。您需要更改s所指向的序列,而不更改s所指向的位置,以便以一种将反映在函数外部的方式修改序列。您可以在
insertFirstElement
函数中按值传递指针。从函数返回后,指针的地址保持不变。您需要将指针传递给指针,这样
void insertFirstElement(Sequence** s, int e) {
if (*s == NULL) {
*s = (Sequence*)malloc(sizeof(Sequence));
(*s)->value = e;
(*s)->next = NULL;
return;
}
}
相应地,调用函数,insertFirstElement(s2,5)代码>修改为
insertFirstElement(&s2,5)代码>在函数void insertFirstElement(序列*s,int e)
由于linkedlist将被修改,因此请使用“按引用调用”(您使用的是“按值调用”方法)
请尝试使用void insertFirstElement(序列**s,int e),因为在insertFirstElement
中,您的s
在本地被修改,就是这样,分配不会被传回。你有一个内存泄漏(你正在malloc'ing,然后再也没有释放它)函数修改变量的一个副本,该副本在函数退出时被遗忘。请所有从标题中知道问题所在的人举手:)我认为使用动态初始化直接修改参数,而且是一个指针。
void insertFirstElement(Sequence** s, int e) {
if (*s == NULL) {
*s = (Sequence*)malloc(sizeof(Sequence));
(*s)->value = e;
(*s)->next = NULL;
return;
}
}