处理链接列表,我将指向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?我知道我可以将指针作为参数传递给第一个,但我不应该修改原型设计。
答案 0 :(得分:0)
你需要传入指针和一个指向头部指针的指针。更新指向头部的指针,并且head->在老头旁边
答案 1 :(得分:0)
如果它是一个全局变量,只需像在void函数中它是局部变量那样分配值。
答案 2 :(得分:0)
假设你的结构类似于:
struct list {
int data;
struct list* next;
};
你有全局变量
struct list* L
您可以通过创建一个新节点,将下一个变量放到头部,并使您的全局值指向新节点来创建一个新节点:
newnode->next = L;
L = newnode