Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Array Decay trong C++ là gì? Cách ngăn chặn

Array Decay là mất thông tin kiểu và kích thước mảng khi truyền mảng vào hàm qua con trỏ hoặc giá trị. Chỉ địa chỉ phần tử đầu được truyền (con trỏ), sizeof trong hàm trả về kích thước con trỏ (8 byte trên 64-bit), không phải kích thước mảng gốc.

Ví dụ Array Decay

#include <iostream>
using namespace std;

void DisplayValue(int *p) {
    cout << "New size of array by passing the value: " << sizeof(p) << endl;
}
void DisplayPointer(int (*p)[10]) {
    cout << "New size of array by passing the pointer: " << sizeof(p) << endl;
}

int main() {
    int arr[10] = {1, 2};
    cout << "Actual size of array is: " << sizeof(arr) << endl; // 40
    DisplayValue(arr);      // 8
    DisplayPointer(&arr);   // 8
}

Kết quả

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

Cách ngăn chặn Array Decay

  1. Truyền thêm tham số size, không dùng sizeof trên tham số mảng.
  2. Truyền mảng bằng tham chiếu (reference): Ngăn chặn chuyển đổi thành con trỏ, giữ nguyên kiểu và kích thước.

Ví dụ truyền tham chiếu

#include <iostream>
using namespace std;

void Display(int (&p)[10]) {
    cout << "New size of array by passing reference: " << sizeof(p) << endl;
}

int main() {
    int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    cout << "Actual size of array is: " << sizeof(arr) << endl; // 40
    Display(arr); // 40
}

Kết quả

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