हिन्दी में वैबसाइट डिजाइनिंग सीखना चाहते हैं तो हमारी साइट code sikho hindi को Subscribe करें

C++ Array of Pointers

 सी ++ पॉइंटर्स की सरणी - C++ Array of Pointers

C++ Array of Pointers


C++ Array of Pointers


ऐरे और पॉइंटर्स एक दूसरे से निकटता से संबंधित हैं। सी ++ में, सरणी के नाम को सूचक के रूप में माना जाता है, यानी, सरणी के नाम में तत्व का पता होता है। सी ++ सरणी नाम को पहले तत्व के पते के रूप में मानता है। उदाहरण के लिए, यदि हम एक सरणी बनाते हैं, यानी, अंक जो पूर्णांक प्रकार के 20 मान रखते हैं, तो अंकों में पहले तत्व का पता होगा, यानी अंक [0] होंगे। इसलिए, हम कह सकते हैं कि सरणी नाम (अंक) एक सूचक है जो किसी सरणी के पहले तत्व का पता रखता है।


आइए इस परिदृश्य को एक उदाहरण के माध्यम से समझते हैं।


#include <iostream>  

using namespace std;  

int main()  

{  

    int *ptr;  // integer pointer declaration  

    int marks[10]; // marks array declaration  

    std::cout << "Enter the elements of an array :" << std::endl;  

    for(int i=0;i<10;i++)  

    {  

        cin>>marks[i];  

    }  

    ptr=marks; // both marks and ptr pointing to the same element..  

    std::cout << "The value of *ptr is :" <<*ptr<< std::endl;  

    std::cout << "The value of *marks is :" <<*marks<<std::endl;  

}  


उपरोक्त कोड में, हम एक पूर्णांक सूचक और पूर्णांक प्रकार की एक सरणी घोषित करते हैं। हम ptr=marks; इसका मतलब है कि दोनों चर 'मार्क्स' और 'पीआरटी' एक ही तत्व को इंगित करते हैं, यानी, अंक [0]। जब हम *ptr और *marks के मान को प्रिंट करने का प्रयास करते हैं, तो यह समान निकलता है। इसलिए, यह साबित हो गया है कि सरणी नाम किसी सरणी के पहले तत्व का पता संग्रहीत करता है।


Output:-

Array of Pointers


Array of Pointers -पॉइंटर्स की सरणी


पॉइंटर्स की एक सरणी एक सरणी है जिसमें पॉइंटर प्रकार के चर होते हैं, जिसका अर्थ है कि चर किसी अन्य तत्व को संबोधित करने वाला सूचक है। मान लीजिए कि हम 5 पूर्णांक पॉइंटर्स वाले पॉइंटर की एक सरणी बनाते हैं; तो इसकी घोषणा इस तरह दिखेगी:


int *ptr[5];         // array of 5 integer pointer.   


उपरोक्त घोषणा में, हम ptr नाम के पॉइंटर की एक सरणी घोषित करते हैं, और यह मेमोरी में 5 पूर्णांक पॉइंटर्स आवंटित करता है।


किसी पॉइंटर के ऐरे के एलिमेंट को किसी अन्य एलिमेंट का एड्रेस असाइन करके भी इनिशियलाइज़ किया जा सकता है। आइए इस मामले को एक उदाहरण के माध्यम से देखें।


int a; // variable declaration.  

ptr[2] = &a;    


उपरोक्त कोड में, हम 'a' वेरिएबल के एड्रेस को एक ऐरे 'ptr' के तीसरे एलिमेंट को असाइन कर रहे हैं।


हम पॉइंटर को डिफ्रेंसिंग करते हुए 'ए' के ​​मान को भी पुनः प्राप्त कर सकते हैं।


*ptr[2];  


आइए एक उदाहरण के जरिए समझते हैं।


#include <iostream>  

using namespace std;  

int main()  

{  

    int ptr1[5]; // integer array declaration  

    int *ptr2[5]; // integer array of pointer declaration  

    std::cout << "Enter five numbers :" << std::endl;  

    for(int i=0;i<5;i++)  

    {  

        std::cin >> ptr1[i];  

    }  

    for(int i=0;i<5;i++)  

    {  

        ptr2[i]=&ptr1[i];   

    }  

    // printing the values of ptr1 array  

    std::cout << "The values are" << std::endl;  

    for(int i=0;i<5;i++)  

    {  

        std::cout << *ptr2[i] << std::endl;  

    }  

    }  


उपरोक्त कोड में, हम पूर्णांक प्रकार की एक सरणी और पूर्णांक पॉइंटर्स की एक सरणी घोषित करते हैं। हमने 'फॉर' लूप को परिभाषित किया है, जो एक सरणी 'ptr1' के तत्वों के माध्यम से पुनरावृति करता है, और प्रत्येक पुनरावृत्ति पर, इंडेक्स 'i' पर ptr1 के तत्व का पता इंडेक्स 'i' पर ptr2 में संग्रहीत हो जाता है।


Output:-

Array of Pointers


अब तक, हमने एक पूर्णांक के लिए पॉइंटर्स की सरणी सीखी है। अब, हम देखेंगे कि स्ट्रिंग्स के लिए पॉइंटर्स की सरणी कैसे बनाई जाती है।


स्ट्रिंग्स के लिए सूचक का ऐरे


स्ट्रिंग्स के लिए पॉइंटर की एक सरणी वर्ण पॉइंटर्स की एक सरणी है जो स्ट्रिंग के पहले वर्ण का पता रखती है या हम एक स्ट्रिंग का आधार पता कह सकते हैं।


स्ट्रिंग के पॉइंटर्स की एक सरणी और वर्णों की द्वि-आयामी सरणी के बीच निम्नलिखित अंतर हैं:


स्मृति खपत के मामले में स्ट्रिंग के लिए पॉइंटर्स की एक सरणी वर्णों की द्वि-आयामी सरणी से अधिक कुशल है क्योंकि स्ट्रिंग्स को पॉइंटर की एक सरणी स्ट्रिंग को स्टोर करने के लिए वर्णों की द्वि-आयामी सरणी की तुलना में कम स्मृति का उपभोग करती है।


पॉइंटर्स की एक सरणी में, 2d सरणी के मामले की तुलना में स्ट्रिंग्स का हेरफेर तुलनात्मक रूप से आसान है। हम पॉइंटर्स का उपयोग करके स्ट्रिंग्स की स्थिति को भी आसानी से बदल सकते हैं।


आइए देखें कि स्ट्रिंग के लिए पॉइंटर्स की सरणी कैसे घोषित करें।


सबसे पहले, हम स्ट्रिंग के लिए सूचक की सरणी घोषित करते हैं:


char *names[5] = {"john",  

                  "Peter",  

                  "Marco",  

                  "Devin",  

                  "Ronan"};  


उपरोक्त कोड में, हमने सूचक नामों की एक सरणी को आकार 5 के 'नाम' के रूप में घोषित किया है। उपरोक्त मामले में, हमने घोषणा के समय आरंभीकरण किया है, इसलिए हमें सरणी के आकार का उल्लेख करने की आवश्यकता नहीं है। सूचक। उपरोक्त कोड को फिर से लिखा जा सकता है:


char *names[ ] = {"john",  

                  "Peter",  

                  "Marco",  

                  "Devin",  

                  "Ronan"};  


उपरोक्त मामले में, 'नाम' सरणी का प्रत्येक तत्व एक स्ट्रिंग शाब्दिक है, और प्रत्येक स्ट्रिंग शाब्दिक एक स्ट्रिंग के पहले वर्ण का आधार पता धारण करेगा। उदाहरण के लिए, नाम [0] में "जॉन" का मूल पता होता है, नाम [1] में "पीटर" का मूल पता होता है, और इसी तरह। यह गारंटी नहीं है कि सभी स्ट्रिंग शाब्दिक सन्निहित स्मृति स्थान में संग्रहीत किए जाएंगे, लेकिन एक स्ट्रिंग शाब्दिक के वर्ण सन्निहित स्मृति स्थान में संग्रहीत किए जाते हैं।


चलिए एक सरल उदाहरण बनाते हैं।


#include <iostream>  

using namespace std;  

int main()  

{  

  char *names[5] = {"john",  

                    "Peter",  

                    "Marco",  

                    "Devin",  

                    "Ronan"};  

for(int i=0;i<5;i++)  

    {  

        std::cout << names[i] << std::endl;  

    }  

    return 0;  

}  


उपरोक्त कोड में, हमने 5 स्ट्रिंग शाब्दिक धारण करने वाले चार पॉइंटर की एक सरणी घोषित की है, और प्रत्येक स्ट्रिंग का पहला वर्ण स्ट्रिंग का आधार पता धारण कर रहा है।


Output:-

Array of Pointers 03