“无法转换为指针类型”C

时间:2016-05-02 00:52:52

标签: c pointers

我正在使用我编写的通用堆栈库编写一个后缀计算器。我将通过说这是一项家庭作业来做序,我通常不会在网上寻求帮助,但辅导中心/帮助室今天关闭。

我有一个函数“calc”,它接受来自stdin的字符输入,对其进行标记,并确定它是否为数字+-*,或^。令牌处理器正常工作,因为我之前已经对所有情况进行了测试。

实现堆栈库时似乎存在问题。

这是有问题的代码:

char num[MAX_NUM];
float n;
while (1) {
            switch (token = get_tok(num, sizeof(num))) {
            case TOK_NUM:
                    //printf("TOK_NUM: %s (%lf)\n", num, strtod(num, NULL));
                    n = strtod(num, NULL);
                    push(stk, (void *)n);        
                    printf("TOK_NUM_STK: %lf\n", (float)peek(stk));
                    pop(stk);
                    break;

还有其他的switch语句来处理其他字符(+, - ,*和^),但我还没有转向它们。

我们的想法是将字符数组num转换为浮点数。

push函数是我的堆栈库的一部分。这是代码:

struct stack_t {
    int count;
    struct node_t {
            void *data;
            struct node_t *next;
    } *head;
};

void push(stack stk, void *data) {

    struct node_t *tmp = malloc(sizeof(struct node_t));

    tmp -> data = data;

    tmp -> next = stk -> head;

    stk -> head = tmp;

    (stk -> count)++;
}

堆栈库按照我的预期工作,因为我以前在其他程序中使用它,所以我并不担心。

我的问题是,当我编译我的后缀计算器时,我得到错误“无法转换为指针类型”并且它引用了这一行:

push(stk, (void *)n); 

我现在要做的就是从stdin获取用户的输入,将其推入堆栈,从堆栈中读取,然后将其从堆栈中弹出。我不知道为什么我现在收到这个错误,我不知道如何解决它。任何帮助或提示让我朝着正确的方向前进都将非常感激。

1 个答案:

答案 0 :(得分:4)

floatdouble与整数类型不兼容,你不能将它们转换为指针,你想要的是在堆栈上使用float,或者指向浮点数的指针:

float *f = malloc(sizeof *f);
*f = n;
push(stk, f);

要使用堆栈上的元素,请将其转换回来:

float *f = pop(stk);  // I assume your pop function returns a void *
float n = *f;  // n is the number your pushed