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);
}

輸出

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++中防止陣列衰減。有以下兩種方法可以防止陣列衰減。

  • 透過將陣列的大小作為引數傳遞來防止陣列衰減,並且不要對陣列的引數使用sizeof()。
  • 透過引用將陣列傳遞給函式。這可以防止陣列轉換為指標,並防止陣列衰減。

示例

 線上演示

#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);
}

輸出

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

更新於:2019年12月17日

124 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始
廣告