国产一区二区精品-国产一区二区精品久-国产一区二区精品久久-国产一区二区精品久久91-免费毛片播放-免费毛片基地

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > 為什么不存在引用的數組?

為什么不存在引用的數組?

來源:千鋒教育
發布人:xqq
時間: 2023-10-11 08:45:35 1696985135

一、為什么不存在引用的數組

因為數組是存放對象的地方,引用不是一個對象。指針和引用最大的區別就是指針是一個對象,引用不是對象。引用和指針不同。引用只是別名,沒有確定的大小,必須引用一個確定存在的變量。

如果給了一個引用的數組,該如何分配空間呢?指針可以給一個NULL值或者nullptr,但是引用不行。

沒有引用數組的原因

(1)引用數組指的是引用類型的數組,也就是數組的各個成員是引用&類型,這是在c++中不能實現的

(2)c++中,引用可以說只是某個變量的別名,所謂別名,是和指針類型區分開的:指針類型也可以

指向某個變量,但指針類型本身也是一個變量,而引用實際上不是一個變量。更本質來說,可以

理解為引用沒有自身的地址,不占用內存空間(這里為了簡化問題可以這樣考慮)。因此,

聲明引用數組沒有辦法分配空間,因為根本就沒有空間可以分配給引用。所以不能聲明和定義引用數組

(3)C++不支持傳統意義的復制:

傳統的復制為:int a = b;

這里a和b在內存中分別占用不同的內存空間,但是內容一致。

如果int& a = b; 這個時候,內存中a并不被分配內存,所以沒有復制可言。

所以對于數組元素是引用來說,沒法完成元素的復制操作,沒有給數組分配內存,所以數組中的元素不能是引用。

延伸閱讀:

二、數組的引用的作用(存在)

(1)作為形參(防止數組退化為指針)

int func(int array[]);

int func(int array[10]);

int func(int* array);

在func中是無法知道數組的大小,如果開發者必須提前知道數組的大小,就需要用到數組的引用做參數

例如,int(&a)[2],可以有效的防止數組退化。也就是,數組作為函數參數傳遞過去后,仍然是一個數組。

優點:節省內存消耗,不用拷貝一份數組,直接使用原數組(甚至可以修改原數組)

#include

using namespace std;

int func(int(&a)[6])

{

??? int count = 0;

??? for (int i = 0; i < 6; i++)

??? {

?????? count += a[i];

??? }

??? return count;

}

int main()

{

??? int a1[6] = { 1,2,3,4,5,6 };

??? int count = func(a1);

??? cout << “count:” << count << endl;

??? return 0;

}

代碼安全性提高:

如果將 int a1[6] = { 1,2,3,4,5,6 }; 改為 int a1[5] = { 1,2,3,4,5 };

編譯會報錯說明編譯時將進行數組長度的檢查

(2)作為返回類型

函數不能直接返回數組,但是可以返回數組的指針和數組的引用,還需要注意,返回的不能是棧對象,

因為棧對象很快會被銷毀

有關定義:

題目:編寫一個函數的聲明,使其返回包含10個string對象的數組的引用

//不用類型別名

string(&func(形參))[10];

//類型別名

using arr = string[10];

arr& func(形參);

typedef string(&arr)[10];

arr func(形參);

//尾置返回類型

auto func(形參)->string(&)[10];

//decltype關鍵字

string ss[10];

decltype(ss) &func(形參)

聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT