Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C/C++ पॉइंटर पहेली?


मान लीजिए हमारे पास एक इंटीजर वेरिएबल है जिसका आकार 4 बाइट है, एक और पॉइंटर वेरिएबल है, जिसका आकार 8 बाइट्स है। तो निम्नलिखित का आउटपुट क्या होगा?

उदाहरण

#include<iostream>
using namespace std;
main() {
    int a[4][5][6];
    int x = 0;
    int* a1 = &x;
    int** a2 = &a1;
    int*** a3 = &a2;
    cout << sizeof(a) << " " << sizeof(a1) << " " << sizeof(a2) << " " << sizeof(a3) << endl;
    cout << (char*)(&a1 + 1) - (char*)&a1 << " ";
    cout << (char*)(&a2 + 1) - (char*)&a2 << " ";
    cout << (char*)(&a3 + 1) - (char*)&a3 << " ";
    cout << (char*)(&a + 1) - (char*)&a << endl;
    cout << (char*)(a1 + 1) - (char*)a1 << " ";
    cout << (char*)(a2 + 1) - (char*)a2 << " ";
    cout << (char*)(a3 + 1) - (char*)a3 << " ";
    cout << (char*)(a + 1) - (char*)a << endl;
    cout << (char*)(&a[0][0][0] + 1) - (char*)&a[0][0][0] << " ";
    cout << (char*)(&a[0][0] + 1) - (char*)&a[0][0] << " ";
    cout << (char*)(&a[0] + 1) - (char*)&a[0] << " ";
    cout << (char*)(&a + 1) - (char*)&a << endl;
    cout << (a[0][0][0] + 1) - a[0][0][0] << " ";
    cout << (char*)(a[0][0] + 1) - (char*)a[0][0] << " ";
    cout << (char*)(a[0] + 1) - (char*)a[0] << " ";
    cout << (char*)(a + 1) - (char*)a;
}

इस प्रश्न को हल करने के लिए, हम नीचे दिए गए कुछ महत्वपूर्ण बिंदुओं का पालन कर सकते हैं:

  • इंटीजर का आकार 4-बाइट (32 बिट) है और पॉइंटर का आकार 8-बाइट है। यदि हम पॉइंटर में 1 जोड़ते हैं, तो यह अगले तत्काल प्रकार को इंगित करेगा।

  • &a1 का प्रकार int** है, &a2 int*** है और &a3 का प्रकार int**** है। यहां सभी पॉइंटर्स को इंगित कर रहे हैं। यदि हम 1 जोड़ते हैं, तो हम 8-बाइट जोड़ रहे हैं।

  • a[0][0][0] एक इंटीजर है, &a[0][0][0] int* है, a[0][0] int* है, &a[0][0] का प्रकार int(*)[6] है और इसी तरह। तो &a का प्रकार int(*)[4][5][6] है।

आउटपुट

480 8 8 8 8 8 8 480 4 8 8 120 4 24 120 480 1 4 24 120

  1. - C/C++ में putwchar() फंक्शन

    इस लेख में हम C++ STL में putwchar() फंक्शन के कार्य, सिंटैक्स और उदाहरणों पर चर्चा करेंगे। putwchar() क्या है? putwchar() फंक्शन C++ STL में एक इनबिल्ट फंक्शन है, जो हेडर फाइल में परिभाषित है। putwchar() फंक्शन का उपयोग स्टैंडर्ड आउटपुट डिवाइस पर वाइड कैरेक्टर लिखने के लिए किया जाता है। यह फंक्शन

  1. - C/C++ में memcpy() फंक्शन

    इस लेख में हम C++ STL में memcpy() फंक्शन के कार्य, सिंटैक्स और उदाहरणों पर चर्चा करेंगे। memcpy() क्या है? memcpy() फंक्शन C++ STL में एक इनबिल्ट फंक्शन है, जो हेडर फाइल में परिभाषित है। memcpy() फंक्शन का उपयोग मेमोरी के ब्लॉक्स को कॉपी करने के लिए किया जाता है। इस फंक्शन का उपयोग एक मेमोरी लोकेश

  1. C/C++ में AA ट्रीज C/C++ में AA ट्रीज

    कंप्यूटर साइंस में AA ट्री को संतुलित ट्री के एक रूप के रूप में परिभाषित किया गया है जिसे क्रमबद्ध डेटा को कुशलतापूर्वक स्टोर और पुनर्प्राप्त करने के लिए लागू किया जाता है। AA ट्रीज को रेड-ब्लैक ट्री के एक रूपांतर के रूप में माना जाता है, एक प्रकार का बाइनरी सर्च ट्री जो प्रविष्टियों के कुशल जोड़ और