2010-12-17 15 views
5

क्या यह संभव है?संरचना में अपने प्रकार के लिए सूचक?

typedef struct { 
    listLink *next; 
    listLink *prev; 

    void *data; 
} listLink; 
+0

tm1rbt द्वारा अनुभव किया गया प्रारंभिक भ्रम नहीं टाइपेडफ्रेमिंग structs के लिए क्लासिक तर्क है। क्लाइंट कोड में 'स्ट्रक्चर लिस्ट लिंक्स' लिखना इतना कठिन नहीं है। Typedef होने के कारण obfuscatious और पूरी तरह से अनावश्यक है। –

+0

संबंधित: [टाइपपीफ संरचना बनाम संरचना परिभाषा] (http://stackoverflow.com/questions/1675351/typedef-struct-vs-struct-definitions) – styfle

उत्तर

6

हाँ, इस के साथ

struct list { 
    int value; 
    struct list *next; 
}; 

या

typedef struct list 
{ 
     int value; 
     struct list *next; 
} list; 
3

हाँ Syntaxis, लेकिन typedef बाद में बयान में जब तक ऐसा नहीं होता है तो आप अपने आप में एक struct देने की आवश्यकता नाम। जैसे

struct listLink { 
    struct listLink *next; 
    struct listLink *prev; 

    void *data; 
}; 

और तुम लपेट कर सकते हैं कि एक typedef में अगर आप struct listLink <whatever> के रूप में प्रत्येक उदाहरण घोषित करने के लिए नहीं करना चाहती।

0

यह संभव है ths osgrx दिए गए वाक्यविन्यास के साथ। इसके अलावा, इसे एक लिंक्ड सूची कहा जाता है: http://www.ehow.com/how_2056292_create-linked-list-c.html

कोई नाम चुनें, फिर इसे परिभाषित करने के लिए टाइपपीफ का उपयोग करें। प्रत्येक लिंक्ड सूची को एक संरचना की आवश्यकता होगी, भले ही इसमें केवल एक चर हो:

typedef struct product_data PRODUCT_DATA; 

संरचना को परिभाषित करें। पिछले तत्व प्रकार के लिए सूचक तुम सिर्फ परिभाषित है, और "अगले" नाम होना चाहिए:

typedef struct listLink listLink ; 

struct listLink{ 
    listLink *next; 
    listLink *prev; 

    void *data; 
} ; 

यह स्पष्ट रूप से से struct अलग करती है और सदस्यों और चर:

struct product_data { 
int product_code; 
int product_size; 
PRODUCT_DATA *next; 
}; 
+2

मुझे पता है कि एक खूनी लिंक्ड सूची क्या है: पी –

+0

आपको प्रतीत नहीं होता जब आप उस तरह के सवाल पूछते हैं तो करें;) – Oleiade

0

मैं इस संस्करण पसंद करते हैं।

संरचना और टाइपपीफ दोनों के लिए समान नाम का उपयोग, struct listLink, listLink, कोई समस्या नहीं है क्योंकि उनके पास अलग-अलग नामस्थान हैं।

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