2011-04-10 111 views
0

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

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; 
    } 
+0

这段代码有太多的错误。你为什么传递newptr呢?如果意图是返回分配的内存,那么它应该是**,并且函数中的newptr的所有实例都应该是* newptr,如果代码中的everyline被打破,那么这里就错了。 – Angelom 2011-04-10 10:20:49

+0

您是否使用Visual Studio?你有没有在某个地方设置断点? – becko 2014-03-07 00:57:56

回答

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; 
    } 
0
newptr->next = top 
top = newptr 

记住,如果x被宣布T *,则x是指针,* x是T.这实在是不难理解的。你想分配指针,而不是覆盖指针指向的地方。

0

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

0

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

另外你可能想在使用** newptr时传入变量。

相关问题