Computer >> Máy Tính >  >> Lập trình >> C ++

Array Decay trong C ++ là gì?

Việc mất kiểu và kích thước của một mảng được gọi là phân rã mảng. Nó xảy ra khi chúng ta truyền mảng vào một hàm bằng con trỏ hoặc giá trị. Địa chỉ đầu tiên được gửi đến mảng là một con trỏ. Đó là lý do tại sao, kích thước của mảng không phải là kích thước ban đầu.

Đây là một ví dụ về phân rã mảng trong ngôn ngữ C ++,

Ví dụ

#include<iostream>
using namespace std;
void DisplayValue(int *p) {
   cout << "New size of array by passing the value : ";
   cout << sizeof(p) << endl;
}
void DisplayPointer(int (*p)[10]) {
   cout << "New size of array by passing the pointer : ";
   cout << sizeof(p) << endl;
}
int main() {
   int arr[10] = {1, 2, };
   cout << "Actual size of array is : ";
   cout << sizeof(arr) <endl;
   DisplayValue(arr);
   DisplayPointer(&arr);
   return 0;
}

Đầu ra

Actual size of array is : 40
New size of array by passing the value : 8
New size of array by passing the pointer : 8

Để ngăn phân rã mảng

Có hai cách sau để ngăn mảng phân rã.

  • Việc phân rã mảng được ngăn chặn bằng cách chuyển kích thước của mảng dưới dạng tham số và không sử dụng sizeof () trên các tham số của mảng.

  • Truyền mảng vào hàm bằng tham chiếu. Nó ngăn chặn việc chuyển đổi mảng thành con trỏ và ngăn phân rã mảng.

Đây là một ví dụ về ngăn chặn phân rã mảng trong ngôn ngữ C ++,

Ví dụ

#include<iostream>
using namespace std;
void Display(int (&p)[10]) {
   cout << "New size of array by passing reference: ";
   cout << sizeof(p) << endl;
}
int main() {
   int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
   cout << "Actual size of array is: ";
   cout << sizeof(arr) <<endl;
   Display(arr);
   return 0;
}

Đầu ra

Actual size of array is: 40
New size of array by passing reference: 40