0

我建立了一个堆栈数据结构,它有一个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.cmain.c只是用$ gcc main.c. 这绝对没有错误。现在我将导入更改为stack.h,并且我正在编译$ gcc main.c stack.c它会引发警告。运行它也会出现段错误(它事先没有)。

4

3 回答 3

3

看起来 peek() 没有在 .h 中声明,所以编译器假设它是一个 int。main() 将其称为假设它是指针返回类型。

警告是 100% 正确的!

于 2012-07-29T09:11:45.197 回答
3

在我看来,您的头文件中有错字?

struct stack_elem * peak(struct stack *);

“峰值”,您的实现显示为“窥视”。不过,不知道这是否会引起这样的警告。

于 2012-07-29T09:11:49.647 回答
2

改变:

struct stack_elem * peak(struct stack *);

至:

struct stack_elem * peek(struct stack *);

:)

于 2012-07-29T09:11:31.267 回答