![](/img/trans.png)
[英]In void function, declaring a global variable doesnot make it global [C]
[英]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.