【发布时间】:2015-12-01 17:58:24
【问题描述】:
我正在努力让在 C 中构建和使用链表变得更加自如,而且在大多数情况下,我认为我已经掌握了基础知识。但是,我在范围方面遇到了问题,特别是指针与结构指针的链接。
在我的linked_list.c 实现中,我使用main 函数来测试和使用我构建的链表函数。但最终目标是从另一个文件运行 Main,并且只从头文件外部引用我需要的几个函数。
我现在使用的实现确实有效,但它似乎依赖于我在我的(临时)main 函数中声明 struct list**。
据我了解,如果您在块之外声明变量/指针,则可以使用 static 命令将链接控制为内部链接,可供文件中的其他函数访问。我想做的是从程序外部调用void initialize_list() 之类的函数,并让它在内部初始化linked list**。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node {
int value;
struct node *next;
};
struct list {
struct node *head;
struct node *tail;
int size; // Maintains current size of list
};
static struct list** work_list;
void dirty_init(void){
struct list* new_list = malloc(sizeof(struct list));
new_list->head = NULL;
new_list->tail = NULL;
new_list->size = 0;
*work_list = new_list;
}
运行我的dirty_init 函数会返回一个段错误。
确实可以工作的代码版本非常相似,但它似乎依赖于在我的main 函数内部声明的**work_list,然后将其传递给initialize_list。
void initialize_list(struct list **out_list){
struct list* my_list = malloc(sizeof(struct list));
my_list->head = NULL;
my_list->tail = NULL;
my_list->size = 0;
*out_list = my_list;
}
int main(void){
int i;
struct list **work_list;
initialize_list(work_list);
}
这一切都很好,但它的缺点是使我的 **work_list 指针在内部链接到 Main 块。尝试让dirty_init 函数工作时我会出错的任何想法?
【问题讨论】:
标签: c pointers linked-list scope