陣列引數 和 指標引數 分析

2021-07-26 19:39:48 字數 903 閱讀 6690

c語言中只會以值拷貝的方式傳遞引數,傳址呼叫本質上也是對位址值的傳遞。

當向函式傳遞陣列時, 將陣列名看做常量指標傳陣列首元素位址。

c語言以高效為最初設計目標,在函式傳遞的時候如果拷貝整個陣列執行效率將大大下降,因此只傳遞首元素的位址。

二維陣列引數同樣存在退化的問題, 二維陣列可以看做是一維陣列, 二維陣列中的每個元素是一維陣列。

二維陣列引數中第一維的引數可以省略。

陣列引數的等價關係:

口訣:最左邊的方框去掉變成星號放到陣列名左邊。

注意事項:

c語言中無法向乙個函式傳遞任意的多維陣列

為了提供正確的指標運算,必須提供除第一維之外的所有維長度,需要表明指標的型別,指標的位址計算需要這個長度。

限制:

- 一維陣列引數 – 必須提供乙個標示陣列結束位置的長度資訊

- 二維陣列引數 – 不能直接傳遞給函式

- 三維或更多維陣列引數 – 無法使用

#include 

void access(int a[3], int row)

}}int main()

, , };

access(a, 3);

}

25 陣列引數和指標引數分析

目錄c 語言以高效作為最初設計目標 二維陣列引數中第一維的引數可以省略 void f int a 5 void f int a void f int a void g int a 3 3 void g int a 3 void g int a 3 等價關係 陣列退化後,所退化的指標必須能指向原陣列中...

c語言深度剖析 35 陣列引數和指標引數分析

1.思考 2.退化的意義 c語言以高效作為最初設計目標 3.二維陣列引數 二維陣列引數中第 維的引數可以省略 4.等價關係 5.被忽視的知識點 6.程式設計實驗 include void access int a 3 int row printf n void access ex int b 2 3...

陣列引數和指標引數的分析

為什麼c語言中的陣列引數會退化為指標?c語言中只會以值拷貝的方式傳遞引數,本質上還是傳值,傳位址也是傳值,只不過傳的是位址值 當向函式傳遞引數時 將整個陣列拷貝乙份乙份傳入函式 錯 將陣列名看做常量指標傳陣列首元素位址對 c語言以高效為最初設計目標,在函式傳遞的時候,如果將拷貝整個陣列執行效率將大大...