C链表 - 指针间接

时间:2017-10-23 16:27:08

标签: c list pointers

我正在尝试在C中创建链接列表,但是我得到了这个奇怪的警告,我不知道如何摆脱它(除了使用pragma),即使它似乎工作正常。我尝试使用双指针,以及在'create'函数中有一个指针属性,但到目前为止没有成功。任何帮助将不胜感激。

#pragma once
#include <stdint.h>

typedef struct node *node_ptr; // node pointer type
typedef struct list *list_ptr; // list pointer type

void create(list_ptr);

实施:

#include <stdlib.h>
#include "list.h"

typedef struct node {
    void * e;               // element
    node_ptr next;          // next pointer
}node_t;

typedef struct list {
    node_ptr front;         // front pointer
}list_t;

void create(list_ptr self) { // create a list
    self->front = NULL;
}

在create()行上,我收到了这些警告,但对我来说没什么用。

#include "list.h"

void main(void) {
    list_ptr list = NULL;
    create(&list);
}

警告:

warning C4047: 'function': 'list_ptr' differs in levels of indirection from 'list_ptr *'
warning C4024: 'create': different types for formal and actual parameter 1

1 个答案:

答案 0 :(得分:3)

您应该在list中使用create(),否则您将通过struct node **

'function':'list_ptr'与'list_ptr *'的间接级别不同这里明确表示你传递的list_ptr*与{{1}不同本身。

因为它基本上是初始化,所以最好给它命名为list_ptr而不是init。 - ikegami的评论