2015-07-01 10 views
5

Mi chiedo, qual è la differenza tra:Stringa la parola chiave nei parametri di funzione, qual è la differenza?

struct Node 
{ 
    int data; 
    Node *next; 
}; 

e

struct Node 
{ 
    int data; 
    struct Node *next; 
}; 

Perché abbiamo bisogno struct parola chiave nel secondo esempio?

Inoltre, qual è la differenza tra

void Foo(Node* head) 
{ 
    Node* cur = head; 
    //.... 
} 

e

void Foo(struct Node* head) 
{ 
    struct Node* cur = head; 
    //.... 
} 
+1

Questo dovrebbe rispondere alla tua domanda: http://stackoverflow.com/questions/8422775/why-does-c-need-struct-keyword-and-not-c – matb

+2

C * o * C++? La risposta è completamente diversa a seconda della lingua. – Quentin

+0

Che cosa ha detto Quentin. Rimuovi il C++ o il tag C. –

risposta

4

solo le dichiarazioni, tra cui struct sono valide in C. Non c'è differenza in C++.

Tuttavia, è possibile typedef il struct in C, quindi non è necessario scriverlo ogni volta.

typedef struct Node 
{ 
    int data; 
    struct Node *next; // we have not finished the typedef yet 
} SNode; 

SNode* cur = head; // OK to refer the typedef here 

Questa sintassi è valida anche in C++ per la compatibilità.

+3

* "Non c'è alcuna differenza in C++." * - non è proprio vero ... con 'struct Node * next; 'è solo una ricerca' struct'/'class' /' union' da quel nome e fortunatamente ignora non-'struct'/'class' /' union's con lo stesso identificatore. Ad esempio, se si aggiunge un membro di dati 'int Node;' a 'struct Node;', non entrerà in conflitto con 'struct Node * next;' ma entrerà in conflitto con 'Node * next;'. Nessuno, comunque, si affida a questa distinzione: rende il codice non mantenibile. –

0

Il nodo Struct è un nuovo tipo di dati definito dall'utente che creiamo. A differenza delle classi, il nuovo tipo di dati che utilizza le strutture è "struct strct_name", ovvero; hai bisogno della parola chiave struct davanti a struct_name. Per le classi non hai bisogno di parole chiave davanti al nuovo nome del tipo di dati. es .;

class abc 
{ 
    abc *next; 
}; 

e quando u dichiarare variabili

abc x; 

anziché struct

abc x; 

nel caso di strutture. anche capire che dalla dichiarazione

struct node * next; 

stiamo cercando di creare un puntatore che punta a una variabile di tipo "nodo strcut", che è chiamato un sé puntatore referenziale in questo caso dal momento che indica la struttura genitore .