陣列作為函式引數傳遞

2021-06-21 15:20:00 字數 1085 閱讀 4931

陣列有兩個特殊的性質。一是不能複製陣列;二是使用陣列名字時,陣列會自動轉化為指向其第乙個元素的指標。由於陣列不能複製,所以無法編寫使用陣列型別形參的函式,因為陣列會被自動轉化為指標。

一、一維陣列

1.三種定義形式:

void printvalues(int *);

void printvalues(int );

void printvalues(int [10]);

void printvalues(int a,int size);//由於編譯器會忽略第一維陣列的長度,所以將其長度作為第二個形參
①編譯器不會為任何陣列形參指定指定長度。因此下面呼叫都是合法的:

int main()

; printvalues(&i); //ok

printvalues(j); //ok

}

編譯沒問題,執行時會出錯;

②陣列形參定義為引用型別。非引用型別傳遞時,陣列會悄悄的轉為指標,即初始化為相應實參的副本,形參複製的是這個指標的值,而非陣列元素本身。然而,通過形參指標做的任何改變都在修改陣列元素本身。

定義為陣列的引用時,將不會轉換為指標,而是傳遞陣列的引用本身,陣列大小成為形參和實參型別的一部分,編譯器會檢查陣列實參的大小和形參是否匹配。

void printvalues(int (&arr)[10])

int main()

,k[10]=;

printvalues(&i); //error

printvalues(j); //error

printvalues(k);//ok

}

二、二維陣列

兩種定義

void printvalues(int (*matrix)[10],int rowsize);

void printvalues(int matrix[10],int rowsize);//因為和一維陣列一樣編譯器會忽略第一維的長度,因此最好把第一維的長度作為第二個形參



陣列作為函式引數傳遞

重點 在c中,陣列是不能作為引數進行傳遞的,但是可以通過傳遞指向陣列初始元素的指標,使得在函式內部運算元組成為可能。在函式這一側,可以通過array i 引用陣列的內容。why?本質上array i 不過是 array i 的語法糖。include void func int array,int s...

函式作為引數傳遞

作為學前端的小白,剛開始學到函式作為引數傳遞時,簡直一臉的懵逼,為什麼有時候要加括號,有時候又不用,特別是遇到setinterval的時候。下面是參考網上的一些答案,做的一些總結 要是有什麼錯誤不合理的地方,煩請指正哦 1 首先要理解一點,函式是一種叫做function引用型別的例項,因此函式是乙個...

函式作為引數傳遞

1.當函式作為引數傳遞時,一般使用函式指標 下面是例子 include typedef int func int x,int y 定義函式指標,指向引數為int x int y 返回值為int的函式 intfunc1 int x,int y 函式func1,引數為int x int y 返回值為in...