ऐरे डेके क्या है?
ऐरे के प्रकार और आयामों की हानि को ऐरे डेके कहते हैं। यह तब होता है जब ऐरे को फ़ंक्शन में पॉइंटर या मान द्वारा पास किया जाता है। पहला पता पॉइंटर के रूप में भेजा जाता है, इसलिए ऐरे का आकार मूल नहीं रहता।
C++ प्रोग्राम उदाहरण
#include <iostream>
using namespace std;
void DisplayValue(int* p) {
cout << "New size by passing value: " << sizeof(p) << endl;
}
void DisplayPointer(int (*p)[10]) {
cout << "New size by passing pointer: " << sizeof(p) << endl;
}
int main() {
int arr[10] = {1, 2};
cout << "Actual size of array: " << sizeof(arr) << endl;
DisplayValue(arr); // ऐरे डेके टू पॉइंटर
DisplayPointer(&arr); // ऐरे पॉइंटर पास करें
return 0;
}
आउटपुट
Actual size of array is: 40 New size of array by passing the value: 8 New size of array by passing the pointer: 8
व्याख्या
- वास्तविक आकार: 10 * 4 बाइट्स (int) = 40 बाइट्स
- मान द्वारा पास: ऐरे पॉइंटर में डेके हो जाता है (64-बिट सिस्टम पर 8 बाइट्स)
- पॉइंटर द्वारा पास: ऐरे पॉइंटर का आकार भी 8 बाइट्स
ऐरे डेके रोकने के तरीके
1. ऐरे आकार को पैरामीटर के रूप में पास करें
void func(int arr[], int size) { // sizeof(arr) यहां काम नहीं करेगा
// size पैरामीटर का उपयोग करें
}
2. रेफरेंस द्वारा पास करें (सर्वोत्तम)
#include <iostream>
using namespace std;
void Display(int (&p)[10]) { // ऐरे रेफरेंस
cout << "Size by reference: " << sizeof(p) << endl;
}
int main() {
int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
cout << "Actual size: " << sizeof(arr) << endl;
Display(arr); // आकार संरक्षित रहता है
return 0;
}
आउटपुट
Actual size: 40 Size by reference: 40
3. std::array उपयोग करें (C++11)
#include <array>
#include <iostream>
void func(std::array<int, 10>& arr) {
cout << "Size: " << arr.size() << endl; // आकार उपलब्ध
}
4. टेम्पलेट आकार निगमन
template <size_t N>
void func(int (&arr)[N]) {
cout << "Size: " << N * sizeof(int) << endl;
}