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

C++ में ऐरे डेके (Array Decay) क्या है?


ऐरे डेके क्या है?

ऐरे के प्रकार और आयामों की हानि को ऐरे डेके कहते हैं। यह तब होता है जब ऐरे को फ़ंक्शन में पॉइंटर या मान द्वारा पास किया जाता है। पहला पता पॉइंटर के रूप में भेजा जाता है, इसलिए ऐरे का आकार मूल नहीं रहता।

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;
}
  1. - C/C++ में void पॉइंटर का आकार क्या है?

    void पॉइंटर का आकार सिस्टम से सिस्टम में भिन्न होता है। यदि सिस्टम 16-बिट है, तो void पॉइंटर का आकार 2 बाइट्स है। यदि सिस्टम 32-बिट है, तो void पॉइंटर का आकार 4 बाइट्स है। यदि सिस्टम 64-बिट है, तो void पॉइंटर का आकार 8 बाइट्स है। यहां C भाषा में void पॉइंटर का आकार खोजने का एक उदाहरण है: उदाहरण #i

  1. - C++ प्रोग्राम सरणी को अधिकतम न्यूनतम रूप में पुनर्व्यवस्थित करने के लिए

    हमें एक पूर्णांक सरणी दी गई है जिसे क्रमबद्ध/अक्रमबद्ध तरीके से व्यवस्थित किया जा सकता है। कार्य पहले सरणी को क्रमबद्ध करना है यदि मान अक्रमबद्ध हैं, फिर सरणी को इस तरह व्यवस्थित करना है कि सरणी का पहला तत्व अधिकतम मान होगा, दूसरा न्यूनतम मान होगा, तीसरा दूसरा सबसे बड़ा मान होगा, चौथा दूसरा सबसे छोट

  1. इमेज एरे क्या है? C++ में उदाहरण सहित समझाएं इमेज एरे क्या है? C++ में उदाहरण सहित समझाएं

    एरे डेटा के संग्रह को संग्रहीत और पुनर्प्राप्त करने का एक सुविधाजनक तरीका है। OpenCV में, हम इस अवधारणा का उपयोग कई इमेज को इमेज एरे में लोड करने और उन्हें एरे के इंडेक्स नंबर का उपयोग करके दिखाने के लिए कर सकते हैं। निम्नलिखित प्रोग्राम एक मैट्रिक्स एरे में कई इमेज लोड करता है और इंडेक्स नंबर द्वार