2016-09-26 3 views
-1

ich Bürste in C auf der Initialisierung und Deklaration von Zeigern aufDeklaration und Initialisierung von Zeigern in C

ich ein Stück Code geschrieben:

struct node 
{ 
    int data; 
    struct node* right=NULL; 
    struct node* left=NULL; 
}; 

struct node* newNode(int data) 
{ 
    struct node* temp = (struct node*)malloc(sizeof(struct node)); 

    temp->data = data; 

    return temp; 
} 

, die einen Fehler zurückgegeben. Der Fehler lautet:

erwartet ';' am Ende des Deklarationsliste

struct node* right=NULL; 

I verändert dann den Code:

struct node 
    { 
     int data; 
     struct node* right; 
     struct node* left; 
     right = NULL; 
     left = NULL; 

    }; 

    struct node* newNode(int data) 
    { 
     struct node* temp = (struct node*)malloc(sizeof(struct node)); 

     temp->data = data; 

     return temp; 
    } 

die den gleichen Fehler zurückgegeben.

Schließlich

ich den Code geändert: kompiliert ohne Fehler

struct node 
{ 
    int data; 
    struct node* right; 
    struct node* left; 
}; 

struct node* newNode(int data) 
{ 
    struct node* temp = (struct node*)malloc(sizeof(struct node)); 

    temp->data = data; 
    temp->right=NULL; 
    temp->left=NULL; 

    return temp; 
} 

Das obige Stück Code. Warum ist das so ?

+0

Formatieren Sie den Code. Zitieren Sie die Fehler. Nennen Sie uns Ihre Annahmen und Erwartungen. –

+0

Oh wirklich? "Es hat einen Fehler zurückgegeben"? Na, dann ist es so "weil". –

+0

'Modul xy ...' kompiliert als C-Code erzeugt einen Fehler. Warum das? Weil es kein gültiger C-Code ist. – Olaf

Antwort

4

Sie können ein struct Mitglied in einer struct Deklaration nicht initialisieren. Du musst es draußen machen, in deinem Code. Die struct Deklaration deklariert einen Typ, keine Variable, die initialisiert werden kann.

+3

Eine 'struct' _definition_ kann einen Initialisierer haben. Du meinst eine 'struct' Deklaration (sie sind nicht die selben!), Resp. eine Typdefinition – Olaf

+0

@Olaf danke, bearbeitet. – Marievi

+0

@Olaf: Falsch. Die C-Sprache verwendet getrennte Konzepte von * Typdefinition * und * Objektdefinition *. 'struct node {...}' ist eine Strukturtyp * definition * (d. h. es handelt sich um eine Art * Deklaration *, die auch eine * definition * ist). Im Gegensatz zu dem, was Sie sagten, * Typdefinitionen * können keine Initialisierer enthalten. Nur * Objektdefinitionen * können Initialisierer enthalten. – AnT

Verwandte Themen