struct node
{
int coef;
int exp;
struct node *link;
};
typedef struct node *NODE;
Odpowiedz
To sprawia, że NODE
jest typedef dla struct node *
.
jaki byłby lepszy sposób napisania tego kodu ... zachowując to samo znaczenie. – Skr
Lepszym sposobem byłoby pominięcie parametru typedef i określenie typu wskaźnika jako "węzeł struktury". –
Definiuje NODE
jako synonim rodzaju struct node *
, więc kiedy będziesz deklarując zmienną typu NODE
będziesz faktycznie deklarując wskaźnik do struct node
.
Osobiście uważam, że taka deklaracja nie jest dobrym pomysłem: "ukrywasz wskaźnik" (co jest prawie zawsze złym pomysłem), a ponadto nie podkreślasz tego faktu w żaden sposób w nowe imię.
+1 dla "Nie ukrywaj typów wskaźników za typem" –
+1 z tego samego powodu. Nazwanie jej 'nodeptr' zamiast' węzła' może pomóc, ale nie ma powodu, aby w ogóle to robić. –
"Nie ukrywaj typów wskaźników za typedef" co masz na myśli przez to – Skr
NODE
staje się pseudonimem dla struct node*
.
EDIT: Dobra, za komentarz (jeśli piszę moją odpowiedź jako komentarz, to byłoby zbyt długo i nie sformatowany):
Nie ma innego sposobu, aby napisać to. Tutaj, typedef
służy tylko do utworzenia synonimu/aliasu dla wskaźnika na struct node
.
Przykładem użycia może być:
void f()
{
// some code
NODE p = NULL;
// do something with p
// for example use malloc and so on
// like: p = malloc(sizeof(struct node));
// and access like: p->coef = ..; p->expr = ..
// do something with p and free the memory later (if malloc is used)
}
jest taka sama jak
void f()
{
// some code
struct node* p = NULL;
// do something with p
}
Korzystanie NODE
czyni go tylko krótszą (tak, nie radzę taką typedef
, jak ukrywasz, że jest to wskaźnik , a nie inny, jak wspomniano w odpowiedzi @Matteo Italia).
Format, o którym mowa: "typedef struct {} type_name format" to coś innego. To jest trochę sztuczka w C
, aby uniknąć pisania słowa kluczowego struct
(jak to jest obowiązkowe w C
, a NIE w C++
). Więc
typedef struct node
{
//..
} NODE;
stałaby NODE
alias struct node
. Tak, ten sam przykład jak powyżej:
void f()
{
// some code
NODE p;
// do something with p
// note that now p is automatically allocated, it's real struct
// not a pointer. So you can access its members like:
// p.coef or p.expr, etc.
}
jest taka sama jak
void f()
{
// some code
struct node p;
// do something with p
}
Zauważ, że teraz, p
jest NIE wskaźnik, to struct node
.
co oznacza
typedef struct node *NODE
?
oznacza to osoba, która nie dowiedział się, że UPPERCASE ma dobrego
Reserve wszystkie wielkie identyfikatory dla makr.
Cheers & HTH.,
Nie sądzę, że dobrym pomysłem jest, aby 'NODE' zawierał' * ' –
@ PeterLee: Dzięki, nie wspomniałem o tym. Hm, dziwię się, że najbardziej przecząca odpowiedź to odpowiedź, która * nie * odpowiada na pytanie o to, co to "wskazuje", i że ta odpowiedź, jako jedyna odpowiedź na to pytanie, została odrzucona. Taki jest SO. –
Nawet jeśli jesteś bardzo solidny i fajny. Nawet jeśli masz dobre wskazówki dotyczące tej sprawy. Nie jest zbyt dobrym pomysłem poniżanie ludzi. B.t.w. nie jest właściwą odpowiedzią na to pytanie. To jest główna przyczyna, dla której można znaleźć odpowiedź. – I159
po prostu mówi można utworzyć wskaźnik typu węzła przy użyciu tylko NODE za każdym razem zamiast napisać węzeł struct * Everytime
- 1. Co oznacza typedef A (* AF)()?
- 2. co oznacza (node *) NULL w C?
- 3. Co robi "typedef void (* coś)()" oznacza
- 4. Co oznacza podkreślenie w strukturze typedef?
- 5. Co oznacza typedef enum składniowa, jak "1 << 0"?
- 6. Wykryj i Zgłoś typedef Błędy ... Co to oznacza?
- 7. C typedef od wskaźnika do struktury
- 8. Co oznacza P :: ************ w pliku Boost assert.hpp?
- 9. Co oznacza: * w C++?
- 10. Co oznacza składnia struktury ivar _tableFlags w UITableView.h?
- 11. Co oznacza "@" w Haskell?
- 12. Co oznacza (+ var) oznacza
- 13. Co oznacza tablica asocjacyjna?
- 14. Co to jest node-gyp
- 15. Co oznacza "bez głowy"?
- 16. Co oznacza ta linia preprocesora C/C++?
- 17. Co znaczy: co oznacza?
- 18. Co oznacza = *?
- 19. Co oznacza "::"?
- 20. Co oznacza xmlns = "" dokładnie oznacza
- 21. co oznacza „$ &” oznacza w Ruby
- 22. Zadzwoń do biblioteki C++ z Node.js (Węzeł addons/node-ffi)
- 23. Co właściwie oznacza ten sret?
- 24. Co oznacza destrukturyzacja w Clojure?
- 25. Co oznacza znak "t" w parametrze dispatch_queue_t?
- 26. Co oznacza podwójny skrót (#) w makrze?
- 27. Wyrównanie struktury w GCC (czy należy ustawić wyrównanie w typedef?)
- 28. Wskaźnik odwołania do błędu niekompletnego przy użyciu struktury typedef w C
- 29. typedef NS_ENUM vs typedef enum
- 30. Co oznacza 0x0F? A co oznacza ten kod?
Proszę nie chować typy wskaźnika tył typedefs w rzeczywistym kodzie though . –
zły smak. SCNR – ninjalj
jaki byłby lepszy sposób napisania tego kodu.W strukturze książki jest używany na 3 do 4 sposobów ... – Skr