我正在尝试在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
答案 0 :(得分:3)
您应该在list
中使用create()
,否则您将通过struct node **
'function':'list_ptr'与'list_ptr *'的间接级别不同这里明确表示你传递的list_ptr*
与{{1}不同本身。
因为它基本上是初始化,所以最好给它命名为list_ptr
而不是init
。 - ikegami的评论