【问题标题】:pointer confusion - error: passing argument 1 of ‘value’ from incompatible pointer type; note: expected ‘...’ but argument is of type ‘...'指针混淆 - 错误:从不兼容的指针类型传递“值”的参数 1;注意:预期为“...”,但参数类型为“...”
【发布时间】: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


【解决方案1】:

您传递的是指向symTable_t 的指针,而不仅仅是指向symTable_t 的指针。

删除此行中的&:

initTable(&newTable);

错误就会消失。

【讨论】:

    猜你喜欢
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 2017-12-11
    相关资源
    最近更新 更多