gpt4 book ai didi

c - 从不兼容的指针类型警告传递参数

转载 作者:太空狗 更新时间:2023-10-29 15:31:02 26 4
gpt4 key购买 nike

我今天大部分时间都在尝试找出 C 中的指针,甚至问了一个 question早些时候,但现在我被困在别的事情上。我有以下代码:

typedef struct listnode *Node;
typedef struct listnode {
void *data;
Node next;
Node previous;
} Listnode;

typedef struct listhead *LIST;
typedef struct listhead {
int size;
Node first;
Node last;
Node current;
} Listhead;

#define MAXLISTS 50

static Listhead headpool[MAXLISTS];
static Listhead *headpoolp = headpool;

#define MAXNODES 1000

static Listnode nodepool[MAXNODES];
static Listnode *nodepoolp = nodepool;

LIST *ListCreate()
{
if(headpool + MAXLISTS - headpoolp >= 1)
{
headpoolp->size = 0;
headpoolp->first = NULL;
headpoolp->last = NULL;
headpoolp->current = NULL;
headpoolp++;
return &headpoolp-1; /* reference to old pointer */

}else
return NULL;
}

int ListCount(LIST list)
{
return list->size;

}

现在在一个新文件中我有:

#include <stdio.h>
#include "the above file"

main()
{
/* Make a new LIST */
LIST *newlist;
newlist = ListCreate();
int i = ListCount(newlist);
printf("%d\n", i);
}

当我编译时,我收到以下警告(printf 语句打印它应该打印的内容):

file.c:9: warning: passing argument 1 of ‘ListCount’ from incompatible pointer type

我应该担心这个警告吗?代码似乎按照我想要的方式执行,但我显然对 C 中的指针很困惑。在浏览该站点上的问题后,我发现如果我对 ListCount (void *) newlist,我没有收到警告,我不明白为什么,也不明白 (void *) 到底做了什么......

如有任何帮助,我们将不胜感激。

最佳答案

您会因为多个 typedef 而感到困惑。 LIST 是一种类型,表示指向 struct listhead 的指针。所以,您希望您的 ListCreate 函数返回一个 LIST,而不是一个 LIST *:

LIST ListCreate(void)

上面说:ListCreate() 函数将返回一个指向新列表头部的指针。

然后需要将函数定义中的return语句从return &headpoolp-1;修改为return headpoolp-1;。这是因为您想要返回最后一个可用的头指针,并且您刚刚递增了 headpoolp。所以现在你想从中减去 1 并返回它。

最后,您的 main() 需要更新以反射(reflect)上述更改:

int main(void)
{
/* Make a new LIST */
LIST newlist; /* a pointer */
newlist = ListCreate();
int i = ListCount(newlist);
printf("%d\n", i);
return 0;
}

关于c - 从不兼容的指针类型警告传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2160421/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com