struct node
{
int coef;
int exp;
struct node *link;
};
typedef struct node *NODE;
답변
NODE
은 struct node *
의 typedef가됩니다.
이 코드를 작성하는 더 좋은 방법은 무엇입니까? 동일한 의미를 유지합니다. – Skr
더 좋은 방법은 typedef를 생략하고 포인터 유형을'struct node *'로 참조하는 것입니다. –
당신이 유형의 변수를 선언 할 수 있습니다 때 당신이 실제로 수 struct node
에 대한 포인터를 선언하는 것 NODE
그것은 유형 struct node *
의 동의어로 NODE
을 정의하고, 그렇게.
개인적으로 나는 그러한 선언이 좋은 생각이라고 생각하지 않습니다. 포인터를 숨기는 것입니다. (거의 항상 나쁜 생각입니다) 그리고 어떤면에서도이 사실을 강조하지는 않습니다. 새로운 이름으로
"동일한 유형의 포인터 유형을 typedef 뒤에 숨기지 마십시오"에 대한 +1은 –
+1입니다. 'node' 대신에'nodeptr'을 명명하면 도움이 될 것입니다,하지만'typedef' 할 이유가 전혀 없습니다. –
"typedef 뒤에 포인터 유형을 숨기지 마라."이게 무슨 뜻인지이 – Skr
NODE
은 struct 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
입니다.
typedef struct node *NODE
는 무엇을 나타 냅니까?
IT 대문자는 MACROS 대한 GOOD
보호구 모두 대문자 식별자 없다는 것을 배운 한 사람을 나타낸다.
건배 & HTH.,
또한'NODE'가'*'를 포함하는 것이 좋지 않다고 생각합니다 –
@ PeterLee : 고마워, 나는 그 말을 생각하지 않았다. 흠, 나는 가장 많이 상향 된 대답은 이것이 "무엇을 가리키는"것에 대한 질문에 답하지 않고이 질문에 대답하는 유일한 대답이 downvoted다는 것을 알고 있습니다. 그렇습니다. –
매우 견고하고 시원한 경우에도. 사건에 대한 조언이 있더라도 사람들을 모욕하는 것은 너무 좋은 생각이 아닙니다. B.t.w. 이 질문에 대한 적절한 답이 아닙니다. 이것은 답을 줄이는 주요 원인입니다. – I159
은 단순히 당신이 모든 시간 만 NODE를 사용하는 대신 구조체 노드 * 매번을 writting 노드 유형의 포인터를 만들 수 있습니다 알려줍니다
- 1. FOO는 무엇을 나타 냅니까?
- 2. sprintf는 무엇을 나타 냅니까?
- 3. css - a.extra는 무엇을 나타 냅니까?
- 4. "sk"는 무엇을 나타 냅니까?
- 5. CouchDB에서 'this'는 무엇을 나타 냅니까?
- 6. /;/및/^ + /는 무엇을 나타 냅니까?
- 7. Java의 MyClass.class는 무엇을 나타 냅니까?
- 8. -1은 ASCII로 무엇을 나타 냅니까?
- 9. MR 버전은 무엇을 나타 냅니까?
- 10. Fiddler의 SOAPAction은 무엇을 나타 냅니까?
- 11. %. *는 printf에서 무엇을 나타 냅니까?
- 12. MKAnnotation 및 MKAnnotationView는 무엇을 나타 냅니까?
- 13. 병렬 make에서 사용되는로드 평균은 무엇을 나타 냅니까?
- 14. winmd 파일의 버전 255.255.255.255는 무엇을 나타 냅니까?
- 15. $는 magento의 행동에서 무엇을 나타 냅니까?
- 16. 베이지안 분류 자 점수는 무엇을 나타 냅니까?
- 17. <<는 파이썬에서 무엇을 나타 냅니까?
- 18. 파이썬에서 ./ (점 슬래시) 연산자는 무엇을 나타 냅니까?
- 19. Planning Poker 번호는 무엇을 나타 냅니까?
- 20. 아이폰 애플리케이션에서 - (IBAction)은 무엇을 나타 냅니까?
- 21. libxxx.so.N 뒤에 나오는 번호는 무엇을 나타 냅니까?
- 22. dispatch_queue_t의 "t"는 무엇을 나타 냅니까?
- 23. @ 기호는 objective-c에서 무엇을 나타 냅니까?
- 24. mc_mobile_tunnel은 충돌 로그에서 무엇을 나타 냅니까?
- 25. brk 및 sbrk는 무엇을 나타 냅니까?
- 26. i_tmp2는 변수로 사용될 때 무엇을 나타 냅니까?
- 27. 행은 Explain 플랜에서 무엇을 나타 냅니까?
- 28. JPCAP의 패킷 클래스는 무엇을 나타 냅니까?
- 29. "t"는이 SQL에서 무엇을 나타 냅니까?
- 30. Maven pom의 부모 태그는 무엇을 나타 냅니까?
하지만 실제 코드에서 형식 정의 뒤에 포인터 타입을 숨기지 마십시오 . –
나쁜 맛. SCNR – ninjalj
이 코드를 작성하는 더 좋은 방법은 무엇입니까? 책 구조는 3 ~ 4 가지 방법으로 사용됩니다 ... – Skr