2015-07-01 9 views
5

Zastanawiam się, jaka jest różnica pomiędzy:Słowo kluczowe Struct w parametrach funkcji, jaka jest różnica?

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

i

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

Dlaczego potrzebujemy struct słowa kluczowego w drugim przykładzie?

Również jaka jest różnica między

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

i

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

To powinno odpowiedzieć na twoje pytanie: http://stackoverflow.com/questions/8422775/why-does-c-need-struct-keyword-and-not-c – matb

+2

C * lub * C++? Odpowiedź jest zupełnie inna w zależności od języka. – Quentin

+0

Co Quentin powiedział. Usuń znacznik C++ lub C. –

Odpowiedz

4

tylko deklaracje w tym struct obowiązują w C. Nie ma różnicy w C++.

Można jednak typedef w struct w C, więc nie trzeba go pisać za każdym razem.

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 

Ta składnia jest również poprawna w C++ dla kompatybilności.

+3

* "Nie ma różnicy w C++." * - to nie jest do końca prawdą ... z 'struct Node * next;' szuka tylko nazwy 'struct' /' class'/'union' o tej nazwie i szczęśliwie ignoruje non-'struct' /' class'/'union's z tym samym identyfikatorem. Na przykład, jeśli dodasz element danych 'int Node;' do 'struct Node;', to nie będzie on kolidował z 'struct Node * next;', ale będzie kolidował z 'Node * next;'. Nikt przy zdrowych zmysłach nie opiera się na tym rozróżnieniu - sprawia, że ​​kod jest nie do zniesienia. –

0

Węzeł struktury to nowo zdefiniowany przez użytkownika typ danych, który tworzymy. I w przeciwieństwie do klas, nowym typem danych używających struktur jest "struct strct_name", tj; potrzebujesz słowa kluczowego struct przed nazwą struct_name. Dla klas nie potrzebujesz słów kluczowych przed nazwą nowego typu danych. eg;

class abc 
{ 
    abc *next; 
}; 

i gdy u zadeklarować zmienne

abc x; 

zamiast struktury

abc x; 

w przypadku struktur. rozumieją także, że oświadczenie

struct node * next; 

staramy się stworzyć wskaźnik, który wskazuje na zmienną typu „węzła strcut”, który jest nazywany self referential wskaźnik w tym przypadku, ponieważ wskazuje na struktury macierzystej .

Powiązane problemy