【发布时间】:2020-02-28 13:00:31
【问题描述】:
编辑:这太明显了,我不知道我怎么没注意到。谢谢你们的帮助,伙计们!
我正在使用 C 语言中的二叉树制作符号表,但在定义基本函数时遇到了困难。我一直无法完全掌握指针操作,这些错误让我很头疼,我不知道如何解决它们,尽管我相信你们中的许多人会觉得我的问题微不足道。
我有一个这样定义的结构:
typedef struct SymTable {
symbol_t *rootNode;
} symTable_t;
这样的初始化函数:
void initTable(symTable_t *table) {
table->rootNode = NULL;
}
在我的 main.c 中,我调用了这个函数:
symTable_t *newTable = malloc(sizeof(symTable_t));
// check if malloc was successful
initTable(&newTable);
当我尝试翻译时它会抛出这两个错误:
main.c:12:12: error: passing argument 1 of ‘initTable’
from incompatible pointer type [-Werror=incompatible-pointer-types]
initTable(&newTable);
^
In file included from main.c:1:0:
sym_tab.c:18:7: note: expected ‘symTable_t * {aka struct SymTable *}’ but argument is of type ‘symTable_t ** {aka struct SymTable **}’
void initTable(symTable_t *table) {
当我像 _initTable(symTable_t table)_ 一样定义 initTable() 时,它只会抛出更多错误。
提前谢谢你。
【问题讨论】:
-
newTable的类型为symTable_t *。当您使用&newTable中的地址运算符&时,您将获得指向该指针的指针,或者键入symTable_t **。非常像错误消息所说的那样。 -
newTable的类型为symTable_t *,即它是指向symTable_t的指针。如果你获取它的地址,你最终会得到一个指向指针的指针,即symTable_t **。函数initTable不想要这个。它只需要一个指向symTable_t的指针。所以去掉&,直接传指针。
标签: c pointers struct structure