2016-04-22 7 views
5

मैं सी सी हार्ड वे सीखने के माध्यम से काम कर रहा हूं और अभ्यास 16 में कुछ समझने के लिए संघर्ष कर रहा हूं: स्ट्रक्चर और पॉइंटर्स उन्हें।सी संरचना परिभाषा के अंदर एक नेस्टेड पॉइंटर क्यों है?

struct Person *Person_create(char *name, int age, int height, int weight) 
{ 
    struct Person *who = malloc(sizeof(struct Person)); 
    assert(who != NULL); 

    who->name = strdup(name); 
    who->age = age; 
    who->height = height; 
    who->weight = weight; 

    return who; 
} 

मैं समझता हूं कि संरचना व्यक्ति संरचना की शुरुआत में एक सूचक (* person_create) देता है। लेकिन व्यक्ति के अंदर तुरंत घोंसला करने वाली व्यक्ति की दूसरी संरचना परिभाषा क्यों है? इशारा करते हुए * कौन?

क्या कोई इस पर मेरे लिए कुछ प्रकाश डाल सकता है। या मुझे सी

+1

हम 'संरचना व्यक्ति' –

+1

की परिभाषा को याद कर रहे हैं (लेकिन अनुमान लगा सकते हैं)। 'Person_create' फ़ंक्शन 'व्यक्ति' को पॉइंटर देता है। 'कौन' चर उस मान को रखता है जो फ़ंक्शन द्वारा वापस किया जाता है। आप स्मृति आवंटित करते हैं, और स्मृति की स्थिति की एक प्रति सहेजते हैं। इसके बाद आप आवंटित स्मृति के स्थान को वापस करने से पहले इस संरचना के विभिन्न क्षेत्रों को सेट करते हैं, जो इस मामले में है, 'व्यक्ति' की शुरुआत। (आप निरंतर उपयोग के साथ उनमें से लटका पाते हैं) :) - पॉइंटर्स के पास एक पुस्तक में पृष्ठ संख्याओं के लिए एक समान सादृश्य है - वे आपको बताएंगे कि कहां ढूंढना है (सूचक के प्रकार से) क्या होगा । – enhzflep

उत्तर

5

मैं समझता हूँ कि struct Person एक सूचक रिटर्न में struct परिभाषाओं का एक बेहतर स्पष्टीकरण की ओर इंगित (*person_create)

प्रतीक्षा है, यह नहीं कि आप क्या सोचते है, या कम से कम आप डॉन 'टी यह कहना है कि जिस तरह से ....

यहाँ, person_create() एक समारोह, जो struct Person के लिए सूचक रिटर्न है। यह struct Person की परिभाषा है।

अब, उस ने कहा, अपने वास्तविक quetion के लिए आ रहा, struct Person *who को परिभाषित नहीं करता struct Person, बल्कि, यह एक चर who जो struct Person के लिए सूचक है परिभाषित करता है।

समझने में आसानी के लिए, int someRandomVariable = 0 पर विचार करें। यह int को परिभाषित नहीं करता है, है ना? यह प्रकार int के वैरिएबलपरिभाषित करता है।

+0

हाँ। इस उदाहरण में "मैं समझता हूं" शब्दों का उपयोग थोड़ा आशावादी है। मुझे सच में यकीन नहीं है कि क्या हो रहा है। –

+0

धन्यवाद बीटीडब्ल्यू। यह मदद कर रहा है। इसमें कुछ टिप्पणियां लिखेंगी और सोचने में कुछ समय बिताएंगे। –

1

फ़ंक्शन struct Person * प्रकार का सूचक देता है, दूसरे शब्दों में struct Person पर एक पॉइंटर।

विशेष रूप से यहां जिस सूचक को आप वापस कर देंगे, उसका नाम who है, जैसा कि आप घोषणा struct Person * who = ... से समझ सकते हैं। इसलिए, आपको वेरिएबल who के लिए मेमोरी आवंटित करने की आवश्यकता है, जिसे आप भरेंगे, और एक पॉइंटर वापस कर देंगे।

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