簡體   English   中英

C-修改void函數內全局變量的地址

[英]C-modifying the address of a global variable inside a void function

處理一個鏈表,我將指向 head 的指針存儲為全局變量。 我的問題是:如何從 void 函數中分配一個(新)值(在這種情況下為地址)?

編輯

好的,這是一些代碼: 注意:這不是我設計的方式,但我們不應該偏離規范。

typedef struct NODE Node;
typedef Node *NodePtr;

struct NODE{
        char *item;
        Node *next;
};


NodePtr first = NULL; //global


//insert function
Boolean insert( char *new_string ) {
        printf("insert called\n");

        if(first == NULL) {
                first = malloc(sizeof(Node));
                first->next = NULL;
                first->item = new_string;
        }
        else {
                NodePtr inserted  = malloc(sizeof(Node));
                inserted->next = first;
                inserted->item = new_string;
                first = inserted;
        }
        return 1;
}

問題是當我在函數中使用 insert() 時。 它工作正常。 我得到一份工作清單。 但是當另一個函數嘗試首先訪問時,它是空的。

我假設修改函數內的全局變量不會改變實際的第一個 ptr 是否正確? 我知道我可以傳入一個指向 first 的指針作為參數,但我不應該修改原型設計。

你需要傳入指針和一個指向頭的指針..更新頭的指針,和頭->在舊頭旁邊

如果它是一個全局變量,只需像在 void 函數中的局部變量一樣分配值。

假設您的結構與此類似:

struct list {
    int data;
    struct list* next;
};

你有全局變量

struct list* L

您可以通過創建一個新節點,將下一個變量設置為頭部,並使您的全局值指向新節點來創建一個新節點:

newnode->next = L;
L = newnode

暫無
暫無

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

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