将struct传递给函数并添加元素

use*_*278 1 c struct

我是C.的新手.我正在尝试将结构列表传递给函数,并在该函数内填充列表.代码如下:

#include <stdio.h>
#include <stdlib.h>

struct Abc {
    int test;
    struct Abc *next;
};

void demo_fill(struct Abc *data);

int main(int argc, char **argv) {
    struct Abc *db = NULL;
    demo_fill(db);
    printf("%d\n",db->test);
    return 0;
}

void demo_fill(struct Abc *data) {
    int i;
    for( i = 0; i < 5; i++ ) {
       struct Abc *new;
       new = malloc(sizeof(struct Abc));
       new->test = i;
       new->next = data;
       data = new;
   }  
}
Run Code Online (Sandbox Code Playgroud)

运行此时会出现"分段错误(核心转储)"错误,因为当我尝试打印第一个元素时,结构仍为NULL.我究竟做错了什么?

sim*_*onc 5

你按值传递指针.如果要更改调用者指针的值,则需要将指针传递给指针:

int main(int argc, char **argv) {
    struct Abc *db = NULL;
    demo_fill(&db);
    printf("%d\n",db->test);
    return 0;
}

void demo_fill(struct Abc **data) {
    int i;
    for( i = 0; i < 5; i++ ) {
       struct Abc *new;
       new = malloc(sizeof(struct Abc));
       new->test = i;
       new->next = *data;
       *data = new;
   }  
}
Run Code Online (Sandbox Code Playgroud)