我是 C 语言的新手,我目前正在用 C 语言实现一个 Scheme 解释器。我快要结束了,但一个问题困扰着我,我还没有解决。
我想要一个指向结构的“globalEnvironment”指针,该结构在程序运行和修改的整个过程中都保持不变(不是常量)。
/****************************************************************
Creates the List as a pointer to the conscell structure
*/
typedef struct conscell *List;
/****************************************************************
Creates a conscell structure, with a char pointer (symbol) and two pointers to
* conscells (first and rest)
*/
struct conscell {
char *symbol;
struct conscell *first;
struct conscell *rest;
};
List globalEnvironment;
/****************************************************************
Function: globalVariables()
--------------------
This function initializes the global variables
*/
void globalVariables() {
globalEnvironment = malloc(sizeof (struct conscell));
globalEnvironment->symbol = NULL;
globalEnvironment->first = NULL;
globalEnvironment->rest = NULL;
}
如您所见,“List”是指向 conscell 结构的指针。所以我只希望 globalEnvironment 列表是全局的。
问题是我不能在那里做malloc。如果我尝试以下操作:
List globalEnvironment = malloc(sizeof (struct conscell));
而不仅仅是“列出全局环境;”它给出了一个错误,“初始化元素不是常量”
为了解决这种情况,我创建了一个新函数“globalVariables”,它在程序开始时运行,初始化 globalEnvironment 并为其分配内存。 但是它没有像我预期的那样工作,并且我不断收到其他函数的段错误错误,为了简单起见,我没有在此处编写这些错误。
是否有另一种更简单的方法来声明指向 C 中结构的指针(非常量)?
希望有人能帮忙, 谢谢
最佳答案
当您应该只使用全局数据时,您似乎正在尝试 malloc
。你可以试试
struct conscell globalEnvironment;
请记住永远不要释放
它。
如果您需要一个指针句柄以便将单元格插入列表:
struct conscell _globalEnvironment;
List globalEnvironment = &_globalEnvironment;
不过,请记住永远不要free
_globalEnvironment
。
关于c - C中的全局指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13815151/