表达式必须具有指针类型

时间:2011-04-10 10:08:50

标签: c struct

我有一个问题,程序给出了一个错误,比如“表达式必须有指针类型”。你能帮助我吗?

struct stack{
    int i_data;
    char c_data;
    struct stack *next;
}top;

void push_i(struct top *newptr,int info){  

    newptr=(struct top*)malloc(sizeof(top));

    if(newptr!=NULL){
        top->c_data=NULL;
        newptr->i_data=info;
        newptr->next=*top;
        *top=newptr;
    }

4 个答案:

答案 0 :(得分:2)

  • 您正在将类型 struct stack变量混合 top
  • 您的top变量不是指针,您无法更改其指向的内容。
  • c_data不是指针,因此请勿为其指定NULL
  • 你没有使用传递的newptr作为有用的东西 - 它应该是一个局部变量,。

这可能会更好:

struct stack{
    int i_data;
    char c_data;
    struct stack *next;
};

...
struct stack * top = NULL; 
...
void push_i(int info){  

    struct stack * newptr=(struct stack*)malloc(sizeof(struct stack));

    if(newptr!=NULL){
        top->c_data=0;
        newptr->i_data=info;
        newptr->next=top;
        top=newptr;
    }

答案 1 :(得分:0)

newptr->next = top
top = newptr

请记住,如果x被声明为T *,则x是指针,而* x是T.这真的不难理解。您想要指定指针,而不是覆盖指针指向的位置。

答案 2 :(得分:0)

查看你的'struct stack',即结构的描述。 顶部的下一个循环,这是您的结构的一个实例。你似乎在混合两者。 在任何地方都不应该有任何'struct top',它们应该是'struct stack'。

答案 3 :(得分:0)

你有几个问题。第一个是您使用的是top类型而不是变量newptr

此外,您可能希望在传递变量时使用** newptr。