Array of Pointers to String

Array of Pointers to String: एक String हमेंशा एक One-Dimensional Array के रूप में Memory में Store होता है। इस Array को यदि Pointers के प्रयोग से उपयोग में लेना हो, तो हम एक Pointer Variable Declare करते हैं और उस Pointer Variable में उस String का Base Address Assign कर देते हैं। फिर इस Pointer को Increment करके हम उस Array में अलग-अलग Locations पर स्थित Characters पर Pointer द्वारा Move कर सकते हैं।

यानी एक ऐसा One-Dimensional Array जिसमें String Store हो, को एक ही Pointer द्वारा Access किया जा सकता है। इसी तर्क पर यदि हम आगे बढें तो ये भी कह सकते हैं कि एक String प्रकार के One-Dimensional Array का Base Address प्राप्त करके यदि हम उस String के हर Character के साथ प्रक्रिया कर सकते हैं तो फिर एक ऐसा Two-Dimensional Array जिसमें कई Strings हों] को भी एक Pointer द्वारा Access किया जा सकता है।

कैसे ?

आइये समझने की कोशिश करते हैं।

हमने Pointers के बारे में पढते समय ये बताया था कि एक Two-Dimensional Array को उस Array की संख्‍या के अनुसार कई One-Dimensional Array के रूप में मान सकते हैं। अत: यदि एक ऐसा Pointer प्रकार का Array Declare किया जाए, जिसमे हर One-Dimensional Array या Row का Base Address Stored हो तो हम इस Pointer Array द्वारा एक Two-Dimensional String Array को Handle कर सकते हैं।

हम एक उदाहरण द्वारा इस बात को समझते हैं।

माना यदि हमें किसी Variable में एक नाम Store करना जिसमें अधिकतम 10 अक्षरों का नाम Store हो सके तो हम निम्नानुसार एक One-Dimensional Array Declare कर सकते हैं-

        char name[10];

इस Array मे हम केवल एक ही नाम Store कर सकते हैं। यदि हमे ये जरूरत हो कि हम 10 अक्षरों के 10 नाम Memory में Store करना चाहें तो या तो हमें इसी प्रकार के 10 अन्‍य Variables Declare करने होंगे जिसमें 10 अलग-अलग नाम Store किये जा सकें या फिर हम इस Array को ही ऐसा बना दें कि यही Array 10 नाम Accept कर सके। यदि हम इसी Array द्वारा 10 नाम Memory में Store करना चाहते हैं, तो हमें इस Array को निम्नानुसार Two-Dimensional Array में परिवर्तित करना पडेगा-

        char name[10][10];

अब यदि इस Array में हम 10 अक्षरों तक के 10 नाम Store करें तो ये Memory में निम्नानुसार Store होंगे:

Array of Pointers to String

Array of Pointers to String

इस Table में देख सकते हैं कि काफी Space Array द्वारा फालतू Reserve रहता है। यदि इसके स्थान पर एक Pointer Array Declare करें तो हम इस Space को बचा सकते हैं। हम एक Pointer Array में नाम Store करने के लिए निम्नानुसार Declaration कर सकते हैं-

        char *name[] = {“Kuldeep”};

इस Declaration का मतलब है कि name नाम के Variable में String “Kuldeep” का Base Address है। यदि हम इस Pointer Array में Array Elements के Address Store ना करें यानी इसे एक सामान्‍य Array ही रहने दें तो इसे हम निम्नानुसार भी लिख सकते हैं-

        char name[] = “Kuldeep”;

इस प्रकार से हम ये भी कह सकते हैं कि Array में “Kuldeep” नाम का String Index Number 0 पर Store है क्योंकि किसी Array में कोई भी पहला मान हमेंशा Index Number 0 पर Store होता है। यानी हम इसे name[0] = “Kuldeep” भी लिख सकते हैं।

इसका मतलब ये हुआ कि यदि Array को हम Pointer Array बनाते हैं तो इस Array में Index Number 0 पर String “Kuldeep” का Address Store होता है (पूरा String नहीं) और यदि हम इस Array को Pointer Array नहीं बनाते हैं तो यह एक char प्रकार का One-Dimensional Array ही होता है, जिसमें Characters का एक समूह जिसे String कहते हैं, Store होता है।

माना कि String “Kuldeep” Memory में 1500 Storage Cell से Store होना शुरू होता है, तो name के Index Number 0 का Address 1500 होगा और ये String Access करने के लिए हमें Index Number 0 को name[0] Statement Use करना पडेगा।

यदि हम इस String को Pointer द्वारा Access करना चाहें तो हमें Pointer को Increment करना होगा, जिससे One By One Character Read होंगे। इसी Array को यदि Pointer प्रकार का Declare कर दिया जाए, यानी *name कर दिया जाए तो इस Array में Index Number 0 पर Stored String “Kuldeep” का Base Address 1500 Store हो जाएगा। इस Pointer Array द्वारा भी यदि हम Array के Element को Access करना चाहें तो हमें name[0] Statement को ही Use करना होगा।

यदि हम इस Array के मानों को Pointer द्वारा Read करना चाहें तो हम Character By Character इसे Read नहीं कर सकते हैं क्योंकि ये एक Pointer Array है और Pointer में हमेंशा किसी अन्‍य Variable का Address Stored होता है। इसलिए इस Array में केवल एक मान 1500 यानी String “Kuldeep” का Base Address Stored है ना कि पूरा String, जिसे Pointer को Increment करके One By One सभी Characters को Read किया जा सके।

किसी Pointer Array में किसी One-Dimensional Array का Base Address Store होना ये बताता है कि यदि इस Address के मान को Print किया जाए तो हमें पूरा String प्राप्त हो जाएगा। इन दोनों के अन्तर को निम्न चित्र द्वारा बताया जा रहा है:

Array of Pointers to String

Array of Pointers to String

char *name = { “Kuldeep” }; को हम ये भी कह सकते हैं कि Array Name के Index Number 0 पर Element के रूप में एक One-Dimensional Array का Base Address Stored है। यानी:

    name[0] = {“Kuldeep”};

चूंकि Pointer Array *name एक One-Dimensional Array है और इसमें केवल एक ही Address Stored है। इसलिए हम चाहें तो इसमें आवश्‍यकतानुसार और भी कई One-Dimensional Arrays के Address Store कर सकते हैं। ऐसा करने के लिए हम निम्नानुसार Initialization कर सकते हैं-

    char *name[ ] = { “Kuldeep”, “Devdaas” };

इस Declaration से String “Devdaas” नाम का एक और One-Dimensional Array बन जाएगा और इस Array का Base Address name[1] Location पर Store होगा। इसे भी चित्र में दिखाया गया है।

Array of Pointers to String

Array of Pointers to String

इस प्रकार से हम देखते हैं कि किस तरह से हम एक One-Dimensional Pointer Array से Two Dimensional String Array को Handle कर सकते हैं। Pointer का इस प्रकार से प्रयोग करके हम काफी Memory बचा सकते हैं क्योंकि Pointer को जब इस प्रकार से Use किया जाता है, तब हमें Array की Size Declare नहीं करनी होती है। ये Concept अच्छी तरह से समझ मे आ जाए इसके लिए यहां एक उदाहरण द्वारा इसे बताया जा रहा है, जो कि निम्‍नानुसार है:

Array of Pointers to String

Array of Pointers to String

इस Program में हम जब भी कोई String Input करते हैं, तो वह String Memory में किसी Location पर जा कर एक One-Dimensional Array के रूप में Store हो जाती है।

चूंकि हमने यहां जो Array लिया है वो Pointer प्रकार का है और इस Array में केवल किसी भी One-Dimensional Array का Address ही Store हो सकता है। इसलिए हमारे द्वारा Input किया गया String Memory मे इस Array में Store ना होकर किसी भी अन्‍य Location पर Store हो जाता है।

यहां हमने String Input करने के लिए एक Pointer प्रकार के Variable को मा/यम बनाया है इसलिए इस Pointer Array में उस String के प्रथम अक्षर का Address या Base Address उस Index Number के स्थान पर Element के रूप में Store हो जाता है जिस Index Number के प्रयोग से हम हमारा String Input करते हैं।

इस प्रकार से हम एक One-Dimensional Pointer Array द्वारा एक Two-Dimensional String Array को प्रयोग कर सकते हैं। इसी Array of Pointers to String Concept का प्रयोग Command Line Arguments को Accept करने के लिए भी किया जाता है। (Array of Pointers to String – Wiki)

Pointers and Strings
Character Manipulation Functions

C Programming Language in Hindi - BccFalna.com ये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook  C Programming Language in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

C Programming Language in Hindi | Page: 477 + 265 | Format: PDF

BUY NOW DOWNLOAD READ ONLINE