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