struct.h 中的静态全局指针由 struct.c 中的函数分配,但在 main() 中为 NULL

问题描述 投票:0回答:1

结构体.h

#ifndef STRUCT_H
#define STRUCT_H

struct linkedlist
{
    int data;
};

static struct linkedlist *head = NULL;

void build_linkedlist();
#endif

结构.c

#include <stdio.h>
#include <stdlib.h>
#include "struct.h"

void build_linkedlist()
{
    head = malloc(sizeof(struct linkedlist));
    head->data = 5;
    printf("inside build_linkedlist(): head = %p\n\n", head);
}

main.c

#include <stdio.h>
#include "struct.h"

int main()
{
    build_linkedlist();
    printf("inside main(): head = %p\n", head);
}

输出

inside build_linkedlist(): head = 0x55ce669e62a0
inside main(): head = (nil)

问题:

通过调用

build_linkedlist()
head
指针首先分配了一个地址,但是当我们在
main()
中访问它时,它的值是
nil
(我猜这意味着NULL)。

如何解决这个问题?

c pointers struct static global-variables
1个回答
3
投票

您的头文件包含

static
head
end_node
定义。 这意味着包含它们的每个源文件都会获得该变量自己的副本。 所以 main.c 中的
head
与 struct.c 中的
head
是不同的变量,对于
end_node
来说也是一样。

如果您希望变量在所有翻译单元中都可见,则需要在标题中声明而不使用

static
关键字:

extern struct linkedlist *head, *end_node;

并且定义它在一个源文件中:

struct linkedlist *head = NULL, *end_node = NULL;
© www.soinside.com 2019 - 2024. All rights reserved.