我是 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 List 是全球性的。
问题是我不能在那里做 malloc 。如果我尝试以下操作:
List globalEnvironment = malloc(sizeof (struct conscell));
而不仅仅是“列出 globalEnvironment;” 它给出了一个错误,“初始化元素不是常量”
为了解决这种情况,我创建了一个新函数“globalVariables”,它在程序开始时运行,初始化 globalEnvironment 并为其分配内存。但它并没有像我预期的那样工作,并且我不断收到其他功能的分段错误错误,我没有在这里编写以保持简单。
是否有另一种更简单的方法来声明指向 C 中结构的指针(不是常量)?
希望有人能帮忙,谢谢