我建立了一个堆栈数据结构,它有一个peek
方法。调用main时编译器给了我一个warning: initialization makes pointer from integer without a cast
警告。peek
这是我所拥有的:
stack.h
:
struct stack_elem {
struct stack_elem *next;
};
struct stack {
struct stack_elem *top;
};
void stack_init(struct stack *stack);
int isEmpty(struct stack *);
struct stack_elem * peak(struct stack *);
及其实现:
void stack_init(struct stack *stack) {
stack->top = NULL;
}
int isEmpty(struct stack *stack) {
if (stack->top == NULL)
return 1;
else
return 0;
}
struct stack_elem * peek(struct stack *stack) {
if (isEmpty(stack) == 1)
return NULL;
else
return stack->top;
}
在我的main.c
中,我将堆栈定义如下:
struct stack stack;
stack_init(&stack);
并调用 peek:
struct stack_elem * elem = peek(&stack);
此行引发警告。这里奇怪的是我曾经导入stack.c
并main.c
只是用$ gcc main.c
. 这绝对没有错误。现在我将导入更改为stack.h
,并且我正在编译$ gcc main.c stack.c
它会引发警告。运行它也会出现段错误(它事先没有)。