#ifndef STRUCT_H
#define STRUCT_H
struct linkedlist
{
int data;
};
static struct linkedlist *head = NULL;
void build_linkedlist();
#endif
#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);
}
#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)。
如何解决这个问题?
您的头文件包含
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;