C-修改void函数中全局变量的地址
在链表上工作,我将指向head的指针存储为全局变量。我的问题是:如何从void函数中为head分配一个(新)值(在本例中为address) 编辑 好的,这里有一些代码: 注意:这不是我设计的方式,但我们不应该偏离规范C-修改void函数中全局变量的地址,c,pointers,global-variables,C,Pointers,Global Variables,在链表上工作,我将指向head的指针存储为全局变量。我的问题是:如何从void函数中为head分配一个(新)值(在本例中为address) 编辑 好的,这里有一些代码: 注意:这不是我设计的方式,但我们不应该偏离规范 typedef struct NODE Node; typedef Node *NodePtr; struct NODE{ char *item; Node *next; }; NodePtr first = NULL; //global
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的指针,但我不应该修改原型设计。您需要传入指针和指向head的指针。。更新指向head的指针,并在旧head旁边添加head->如果它是一个全局变量,只需像在void函数中是一个局部变量那样赋值即可。假设您的结构类似于此:
struct list {
int data;
struct list* next;
};
还有全局变量
struct list* L
通过创建新节点、将下一个变量设置为head并使全局值指向新节点,可以创建新节点:
newnode->next = L;
L = newnode
在你的问题中要更清楚“我怎样才能从一个void函数中修改一个全局变量的值?”不清楚?它在范围内-更改它。如果它不在范围内,使void函数非void。只是一个注释:就在你给head分配一个新地址之前(既然你提到head,我假设它是一个简单的链表),您是否正在释放旧值(或整个列表)?如果是全局变量,他为什么需要传入它?