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

2021-06-16 19:04:31 字數 1128 閱讀 9212

為什麼c語言中的陣列引數會退化為指標?

c語言中只會以值拷貝的方式傳遞引數,本質上還是傳值,傳位址也是傳值,只不過傳的是位址值

當向函式傳遞引數時

.將整個陣列拷貝乙份乙份傳入函式    錯

.將陣列名看做常量指標傳陣列首元素位址對

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

所以陣列引數退化為指標的意義:就在於高效

二維陣列引數

二維陣列引數同樣存在退化問題

.二維陣列可以看做是一維陣列

.二維陣列中每個元素是一維陣列

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

規律:方框去掉變成*放到陣列名左邊去方框   變*  放左邊

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

為了提供正確的指標運算,必須提供除第一維之外的所有維長度 限制

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

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

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

例1:傳遞與訪問二維陣列的方式

#include void access(int a[3], int row)     //int a[3]會退化為int (*a)[3]

{ int col = sizeof(*a) / sizeof(int);

int i = 0;

int j = 0;

printf("sizeof(a) = %d\n", sizeof(a));

for(i=0; i

陣列引數 和 指標引數 分析

c語言中只會以值拷貝的方式傳遞引數,傳址呼叫本質上也是對位址值的傳遞。當向函式傳遞陣列時,將陣列名看做常量指標傳陣列首元素位址。c語言以高效為最初設計目標,在函式傳遞的時候如果拷貝整個陣列執行效率將大大下降,因此只傳遞首元素的位址。二維陣列引數同樣存在退化的問題,二維陣列可以看做是一維陣列,二維陣列...

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語言中的陣列引數會退化為指標,那有沒有想過為什麼呢?由於c語言當初開發是為unix作業系統的,對於作業系統來說效率是非常重要的,當引數傳遞的時候如果拷貝整個陣列執行效率將大大下降而且引數位於棧上,太大的陣列拷貝將導致棧溢位,所以會將陣列名看做常量指標傳陣列首元素位址,其實二維陣列引數同樣...