Я думаю, что это указатель на список указателей на структуры adjlistnode
Нет, это не так.
AdjMatrix
становится типом, представляющим a pointer to pointer to struct adjlistnode
В качестве примера его можно использовать следующим образом:
AdjMatrix p = NULL; // p is now a pointer to pointer to struct adjlistnode
Код, по-видимому, предназначен для построения связанного списка, а AdjMatrix
- это короткая рука для ссылки науказатель на указатель головы.Он может быть использован как:
void addNode(AdjMatrix pHead, int node, int cost)
{
struct adjlistnode *tmp = malloc(sizeof *tmp);
tmp->node = node;
tmp->cost = cost;
tmp->next = *pHead;
*pHead = tmp;
}
void deleteNode(AdjMatrix pHead)
{
if (*pHead)
{
struct adjlistnode *tmp = *pHead;
*pHead = tmp->next;
free(tmp);
}
}
int main(void) {
struct adjlistnode *head = NULL;
// Add nodes
addNode(&head, 1, 2);
addNode(&head, 3, 4);
addNode(&head, 5, 6);
// ... use the list
// Delete nodes
while(head) deleteNode(&head);
return 0;
}
Обратите внимание, что typedef
указателей часто считается плохой практикой.Вместо этого было бы лучше сделать:
typedef struct adjlistnode {int node; int cost; struct adjlistnode *next;} AdjMatrix;
и использовать его как:
void addNode(AdjMatrix **pHead, int node, int cost)
, чтобы прояснить: pHead
- это указатель на указатель на AdjMatrix