什麼是 C++ 中的陣列衰變?
陣列型別和維度丟失稱為陣列衰變。它發生在我們透過指標或值傳遞陣列到某個函式時。第一個地址傳送到陣列,它是指標。這就是為什麼陣列的大小不是原來的大小。
這裡是一個 C++ 語言中陣列衰變的示例,
示例
#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;
}輸出
Actual size of array is : 40 New size of array by passing the value : 8 New size of array by passing the pointer : 8
阻止陣列衰變
有以下兩種方法可以阻止陣列衰變。
透過傳入陣列大小作為引數並不要在陣列引數上使用 sizeof() 來阻止陣列衰變。
透過引用將陣列傳遞給函式。它可防止陣列轉換成為指標並阻止陣列衰變。
這裡是一個 C++ 語言中阻止陣列衰變的示例,
示例
#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;
}輸出
Actual size of array is: 40 New size of array by passing reference: 40
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP