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

    int exp; 

    struct node *link; 
}; 

typedef struct node *NODE; 
+6

कृपया हालांकि वास्तविक कोड में typedefs पीछे सूचक प्रकार छिपा नहीं है । –

+2

खराब स्वाद। एससीएनआर – ninjalj

+0

इस कोड को लिखने का बेहतर तरीका क्या होगा। पुस्तक संरचना में 3 से 4 तरीकों से उपयोग किया जाता है ... – Skr

उत्तर

7

यह NODEstruct node * के लिए एक टाइपपीफ बनाता है।

+1

इस कोड को लिखने का एक बेहतर तरीका क्या होगा ... एक ही अर्थ को बनाए रखना। – Skr

+3

टाइपपीफ को छोड़ने का एक बेहतर तरीका होगा, और सूचक प्रकार को 'संरचना नोड *' के रूप में देखें। –

18

यह प्रकार struct node * के पर्याय के रूप NODE परिभाषित करता है, इसलिए जब आप प्रकार का एक चर घोषित किया जाएगा NODE आप वास्तव में हो जाएगा struct node के लिए सूचक की घोषणा।

व्यक्तिगत रूप से, मुझे नहीं लगता कि इस तरह की घोषणा एक अच्छा विचार है: आप "एक पॉइंटर छुपा रहे हैं" (जो लगभग हमेशा एक बुरा विचार है), और इसके अलावा, आप इस तथ्य को किसी भी तरह से हाइलाइट नहीं कर रहे हैं नए नाम में।

+4

+1 "एक टाइपेडफ के पीछे पॉइंटर प्रकार छिपाएं" –

+1

+1 इसी कारण से। 'नोड' के बजाय इसे 'नोडिप्टर' नामकरण करने में मदद मिलेगी, लेकिन फिर 'टाइपिफ़' को कोई कारण नहीं है। –

+1

"टाइपिफ़ के पीछे पॉइंटर प्रकार छिपाएं" इस – 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 सलाह नहीं होगा, जैसा कि आप छुपा रहे हैं एक ही

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

का उपयोग NODE यह सिर्फ कम करता है, कि यह सूचक है, struct या अन्य प्रकार का नहीं है, जैसा कि @Matteo Italia के उत्तर में उल्लिखित है)।


प्रारूप, आप रेफर कर रहे हैं: "टाइपपीफ स्ट्रक्चर {} टाइप_नाम प्रारूप" कुछ और है। यह 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. 
} 

रूप

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

नोट है कि अब, pनहीं एक सूचक है एक ही है, यह struct node है।

+0

क्या आप एक ही कोड को अलग तरीके से लिख सकते हैं। टाइपपीफ स्ट्रक्चर {} type_name में एक ही कोड कैसे लिखें; प्रारूप ??? – Skr

+0

अच्छा, मेरा संपादन देखें, मुझे उम्मीद है कि यह और अधिक स्पष्ट हो जाएगा। –

+0

बहुत बहुत धन्यवाद, मुझे यह समय मिला। – Skr

-3

typedef struct node *NODE क्या इंगित करता है?

यह इंगित करता है जो एक व्यक्ति नहीं सीखा है कि अपरकेस कोई अच्छा

रिजर्व सभी अपरकेसमैक्रो के लिए पहचानकर्ता है।

चीयर्स & hth।,

+0

इसके अलावा, मुझे नहीं लगता कि 'NODE' को '*' –

+0

@ पीटरली: धन्यवाद, मैंने इसका उल्लेख करने के बारे में नहीं सोचा था। एचएम, मुझे यह उत्सुक लगता है कि सबसे अधिक उत्तर दिया गया उत्तर वह है जो * यह इंगित करता है कि यह "इंगित करता है" के बारे में सवाल का जवाब नहीं देता है, और यह उत्तर, प्रश्न को संबोधित करने वाला एकमात्र व्यक्ति डाउनवॉट किया गया है। ऐसा एसओ है। –

+0

भले ही आप बहुत ठोस और ठंडा हों। भले ही आपके पास मामले के लिए अच्छी टिप्स हों। लोगों को अपमानित करना बहुत अच्छा विचार नहीं है। B.t.w. यह सवाल के लिए एक उचित जवाब नहीं है। उत्तर को कम करने का यह मुख्य कारण है। – I159

0

बस आप हर बार केवल नोड का उपयोग कर के बजाय struct नोड * हर writting नोड प्रकार का सूचक बना सकते हैं बताता है

संबंधित मुद्दे