मान लीजिए हमारे पास एक इंटीजर वेरिएबल है जिसका आकार 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