2011-10-29 3 views
12
struct node 
{ 
    int coef; 

    int exp; 

    struct node *link; 
}; 

typedef struct node *NODE; 
+6

하지만 실제 코드에서 형식 정의 뒤에 포인터 타입을 숨기지 마십시오 . –

+2

나쁜 맛. SCNR – ninjalj

+0

이 코드를 작성하는 더 좋은 방법은 무엇입니까? 책 구조는 3 ~ 4 가지 방법으로 사용됩니다 ... – Skr

답변

7

NODEstruct node *의 typedef가됩니다.

+1

이 코드를 작성하는 더 좋은 방법은 무엇입니까? 동일한 의미를 유지합니다. – Skr

+3

더 좋은 방법은 typedef를 생략하고 포인터 유형을'struct node *'로 참조하는 것입니다. –

18

당신이 유형의 변수를 선언 할 수 있습니다 때 당신이 실제로 수 struct node에 대한 포인터를 선언하는 것 NODE 그것은 유형 struct node *의 동의어로 NODE을 정의하고, 그렇게.

개인적으로 나는 그러한 선언이 좋은 생각이라고 생각하지 않습니다. 포인터를 숨기는 것입니다. (거의 항상 나쁜 생각입니다) 그리고 어떤면에서도이 사실을 강조하지는 않습니다. 새로운 이름으로

+4

"동일한 유형의 포인터 유형을 typedef 뒤에 숨기지 마십시오"에 대한 +1은 –

+1

+1입니다. 'node' 대신에'nodeptr'을 명명하면 도움이 될 것입니다,하지만'typedef' 할 이유가 전혀 없습니다. –

+1

"typedef 뒤에 포인터 유형을 숨기지 마라."이게 무슨 뜻인지이 – Skr

7

NODEstruct node*의 별명이됩니다.


편집 : 좋아, 코멘트 (내가 주석으로 내 대답을 작성하는 경우, 너무 길고 포맷되지 않은 것) :

이를 기록 할 다른 방법은 없습니다. 여기에서 typedef포인터 ~ struct node에 대한 동의어/별칭을 만드는 데 사용됩니다.
사용에 대한 예는 다음과 같습니다

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) 
} 

은 (당신이 숨어있어 어쨌든, 나는 이러한 typedef 조언을하지 않을 그것은 단지 짧은하게 같은 NODE 사용

void f() 
{ 
    // some code 
    struct node* p = NULL; 
    // do something with p 
} 

과 같다, 포인터이 아니라 struct 또는 @Matteo Italia의 답변에 언급 된 다른 유형이 아님).


형식은 "typedef struct {} type_name 형식"이 다른 것입니다. C의 속임수이기 때문에 struct 키워드를 쓰는 것을 피하십시오 (C에 의무적으로 쓰여지고 C++에는 없음). 그래서

typedef struct node 
{ 
    //.. 
} NODE; 

struct node에 대한 NODE 별칭을 만들 것입니다. 따라서, 위와 같은 예 :

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. 
} 

지금, p하지 포인터입니다

void f() 
{ 
    // some code 
    struct node p; 
    // do something with p 
} 

주와 같은, 그것은 struct node입니다.

+0

다른 방법으로 동일한 코드를 작성할 수 있습니다. typedef에 같은 코드를 쓰는 법 struct {} type_name; 체재??? – Skr

+0

글쎄, 내 편집을보고, 나는 그것이 더 명확하게되기를 바랍니다. –

+0

고맙습니다. – Skr

-3

typedef struct node *NODE는 무엇을 나타 냅니까?

IT 대문자는 MACROS 대한 GOOD

보호구 모두 대문자 식별자 없다는 것을 배운 한 사람을 나타낸다.

건배 & HTH.,

+0

또한'NODE'가'*'를 포함하는 것이 좋지 않다고 생각합니다 –

+0

@ PeterLee : 고마워, 나는 그 말을 생각하지 않았다. 흠, 나는 가장 많이 상향 된 대답은 이것이 "무엇을 가리키는"것에 대한 질문에 답하지 않고이 질문에 대답하는 유일한 대답이 downvoted다는 것을 알고 있습니다. 그렇습니다. –

+0

매우 견고하고 시원한 경우에도. 사건에 대한 조언이 있더라도 사람들을 모욕하는 것은 너무 좋은 생각이 아닙니다. B.t.w. 이 질문에 대한 적절한 답이 아닙니다. 이것은 답을 줄이는 주요 원인입니다. – I159

0

은 단순히 당신이 모든 시간 만 NODE를 사용하는 대신 구조체 노드 * 매번을 writting 노드 유형의 포인터를 만들 수 있습니다 알려줍니다

관련 문제