引數傳遞時陣列引用保護陣列退化為指標

2021-06-07 20:26:10 字數 733 閱讀 1631

如下定義就得到乙個陣列的引用

型別名 (&變數明)[n];

在進行引數的傳遞時,陣列引用可以幫助我們防止陣列退化為指標,而這是我們在程式設計中很難注意到的問題。

下面來看乙個例項:

#include

void each(int int_ref[10])

;each(int_array);//問題1:sizeof()的值?

each2(int_array);//問題2:sizeof()的值?

return 0;

}

當然,如果不去理會sizeof()的話,這兩個函式的輸出不會有任何的不同,他們都能夠正確的輸出array中的10個值,但當我們觀察一下sizeof()的值就會發現很大的不同。

問題1:輸出4

問題2:輸出40

從這我們就能看出,當array作為引數傳遞過去後,如果接收的引數是也是乙個陣列,那麼它就會退化為乙個指標,也就是我們常說的「陣列就是乙個指標」。當接收的引數是乙個陣列引用是,就會發現它還是保持了自己的原生態,即「陣列仍然是乙個陣列」。這時,陣列引用就起到了乙個保護自己退化為乙個指標的作用。

vector陣列 傳遞 引用 指標 引數

vector vec 1.void deal vector vec 2.void deal vector pvec 3.void deal const vector pvec 呼叫時不會呼叫拷貝建構函式 4.void deal vector vec 5.void deal const vector ...

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

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

C語言 引數傳遞使陣列名退化為指標

做題的時候發現了一道題,想了很久也沒有想出來與給出演算法相符合的思路 最後寫了個可以勉強得出結果,但是好像不怎麼對的方法 因為題目給出的變數都已經使用過,所以只能使用陣列名作為增量向後遍歷 但是這時就出現了問題,陣列名竟然不指向首位址元素了,事後想想也知道如果一直指向首元素那麼顯然不能通過這種自增陣...