C 高階 C 中的陣列退化

2021-06-20 15:15:28 字數 915 閱讀 9156

在c++中,陣列永遠不會按值傳遞。它是傳遞第0個元素的指標(即首位址)。

例如,如下宣告:

void putvalues(int[10]);
被編譯器視為:

void putvalues(int*);

陣列的長度與陣列的宣告無關。因此,下列三個宣告是等價的:

void putvalues(int*);

void putvalues(int);

void putvalues(int[10]);

因為陣列被傳遞為指標,所以這對程式設計師有兩個含義:

1. 在被調函式內對引數數則的改變將被應用到數則實參上而不是本地拷貝上。當用作實參的陣列必須保持不變時,程式設計師需要保留原始陣列的拷貝。函式可以通過把引數型別宣告為const來表明不希望改變陣列元素:

void putvalues(const int[10]);

2. 陣列長度不是引數型別的一部分。函式不知道傳遞給它的陣列的實際長度,編譯器也不知道。而編譯器對實參型別進行引數型別檢查時,並不檢查陣列的長度。例如:

void putvalues(int[10]); //視為 int*

int main()

那麼什麼情況下陣列不會退化為指標型別呢?

數則不會退化的情況就三種,我們只要記下來就好了!

1. 初始化的時候。如int a[2] = ; 此時的a為陣列

2. sizeof的時候。如 sizeof(a)此時的a也為陣列

3. &a,此時a為指向乙個還有兩個整型值的陣列

C 中陣列的引用 防止陣列退化

在c語言中,陣列作為函式引數時,實際上陣列已經退化為指標使用。下面這三種用法是等價的 這樣一來,在f1中是無法知道陣列的大小的,開發者必須提前知道陣列大小。c 中定義了陣列的引用 例如,int a 2 可以有效的防止陣列退化。也就是,陣列作為函式引數傳遞過去後,仍然是乙個陣列。語法 型別 引用名 陣...

C 高階陣列

include include include c 的標準庫 include c 字串 using std vector 動態陣列,堆上 using std array 靜態陣列,棧上 using std string 使用c 風格的陣列不需要管理記憶體 array注意不要溢位 array適用於任何...

C 高階陣列

include include include include stdio.h 陣列 元素型別角度 陣列是相同型別的變數有序集合,記憶體角度 聯絡一大片記憶體空間 陣列名陣列首元素的起始位址,但並不是陣列的起始位址 c是陣列首元素的位址c 1 步長4個位元組 c 是整個陣列的位址 1 步長200個位...