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

时间:2015-10-22 23:26:59

标签: c pointers global-variables

处理链接列表,我将指向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?我知道我可以将指针作为参数传递给第一个,但我不应该修改原型设计。

3 个答案:

答案 0 :(得分:0)

你需要传入指针和一个指向头部指针的指针。更新指向头部的指针,并且head->在老头旁边

答案 1 :(得分:0)

如果它是一个全局变量,只需像在void函数中它是局部变量那样分配值。

答案 2 :(得分:0)

假设你的结构类似于:

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

你有全局变量

struct list* L

您可以通过创建一个新节点,将下一个变量放到头部,并使您的全局值指向新节点来创建一个新节点:

newnode->next = L;
L = newnode