Я пытался выяснить указатели на C большую часть сегодняшнего дня, даже задавал вопрос ранее, но теперь я застрял на чем-то другом. У меня есть следующий код:
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 *)
на самом деле не делает ...
Любая помощь будет оценена, спасибо.