2013-03-03 188 views
0

我正在爲C考試工作,並嘗試將元素插入到鏈接列表中時,遇到運行時問題。我唯一的目的是添加4個元素列表,然後列出列表。但是,它給出了一個錯誤。我已經看過一些插入代碼,我的代碼似乎是正確的。看不到錯誤。任何援助將不勝感激。將元素插入到鏈接列表

#include <stdio.h> 
#include <stdlib.h> 

struct ders{ 
    char kod; 
    struct ders *next; 

}*header; 
typedef struct ders Ders; 
void add(Ders*,Ders*); 
void print(Ders*); 

int main(void) 
{ 

header = NULL; 
Ders *node = NULL; 
int i = 0; 
char c; 
while(i<4) 
{ 
    scanf("%c",&c); 
    node = (Ders*)malloc(sizeof(Ders)); 
    node->kod = c; 
    node->next = NULL; 
    add(header,node); 
    i++; 


} 
print(header); 

return 0; 
} 

void add(Ders *header, Ders *node) 
{ 
    if(header == NULL){ 
     header = node; 
     header->next = NULL; } 
    else{ 
     node->next = header; 
     header = node; 

    } 
} 

void print(Ders *header) 
{ 
Ders *gecici = header; 

while(gecici != NULL){ 
    printf("%c\n",gecici->kod); 
    gecici = gecici->next; 
} 
} 
+0

你'header'變量始終是'NULL'因爲你永遠不指定任何東西給它。 – 2013-03-03 10:55:51

回答

1

由於nihirus指出, 「指針是按值傳遞,因此你可以改變它指向的內存,但你不能改變實際的指針,即使其指向別的東西。」

您的修改導致錯誤*header is not member of struct 因爲 ->*

更高的優先級使用 (*header)->next = NULL ,而不是嘗試。

C運算符的優先級: http://www.difranco.net/compsci/C_Operator_Precedence_Table.htm

+0

感謝它。我設法添加一個元素。我想問最後一個問題,只是爲了澄清。如果我們這樣做void(int * a),它需要一個整數數組或整數的地址。換句話說,通過引用調用。爲什麼「void(Ders * a)」需要拷貝一個指針?如果我想爲指針調用callbyref,我必須使用**嗎?是否明智地做這樣的事情:void(char ** a)? – nihirus 2013-03-03 19:46:22