2011-04-10 150 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時傳入變量。

相關問題