簡體   English   中英

引用結構不變

[英]struct by reference not changing

我試圖在C中創建一個基本的鏈表,我有一個結構體和一個“附加”功能。 但是,無論我添加多少項目,該結構都不會改變。 我找不到錯誤,真的。

結構:

typedef struct list {
    int node;
    struct list *next;
} list_t;

追加功能:

void append(list_t *list, int node) {
    if(!list) {
        list = malloc(sizeof(list_t));
        list->node = node;
        list->next = NULL;
    }else {
        list_t *probe = list;
        while(probe->next) probe = probe->next; 
        probe->next = malloc(sizeof(list_t));
        probe = probe->next;
        probe->node = node;
        probe->next = NULL;
    }
}

打印功能:

void lprint(list_t *list) {
    if(!list) {
        printf("empty");
    }else {
        list_t *probe = list;
        do {
            printf("%d ", probe->node);
            probe = probe->next;
        } while(probe);
    }
    printf("\n");
}

主要功能:

void main() {

    list_t *list = NULL;

    int node;
    for(node = 0; node < 5; node++) {
        append(list, node);
        lprint(list);
    }
}

輸出為:

empty
empty
empty
empty
empty

雖然應該是:

0
0 1
0 1 2
0 1 2 3
0 1 2 3 4

有什么幫助嗎?

C中沒有“通過引用傳遞”這樣的東西。您傳遞了一個指針。 按價值。 如果要更改指針,則應傳遞指針到指針。

void append(list_t **list, int node) {
    assert(list != NULL);
    if(! *list) {
        *list = malloc(sizeof(list_t));
        (*list)->node = node;
        (*list)->next = NULL;
    ...
}

請注意,這是錯誤的設計:您應該添加一個函數“ create”,這將創建列表。 “ append”應該做到這一點:將其追加到已經存在的列表中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM