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語言以高效為最初設計目標,在函式傳遞的時候,如果將拷貝整個陣列執行效率將大大...