C-修改void函数中全局变量的地址

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

在链表上工作,我将指向head的指针存储为全局变量。我的问题是:如何从void函数中为head分配一个(新)值(在本例中为address)

编辑

好的,这里有一些代码: 注意:这不是我设计的方式,但我们不应该偏离规范

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,我假设它是一个简单的链表),您是否正在释放旧值(或整个列表)?如果是全局变量,他为什么需要传入它?