C語言中,數組名做爲參數傳遞給函數時,退化爲指針

C語言中,數組名做爲參數傳遞給函數時,退化爲指針;須要數組大小時,數組

須要一個參數傳數組名,另外一個傳數組大小。函數


數組名作函數參數時,就至關於指針了。sizeof對指針操做結果應該是4。
  通常函數參數爲數組時,能夠有兩個參數,一個數組名,一個數組長度的。

首先C語言裏面不支持數組做爲形參來進行調用,指針

例如函數void fun(int a[]);裏面的a實際上在進行編譯時,是做爲指針來處理的,因此上面的函數徹底等價於void fun(int *a);內存

因此當你利用sizeof的時候返回的將是int指針的內存字節數,因此當你想知道數組長度的時候只能作這樣的函數了,void fun(int *a,size_t n);編譯器

 

數組做爲參數傳給函數時,傳的是指針而不是數組,傳遞的是數組的首地址,如 fun (char[8]),fun(char [])都等價於 fun(char*)~~編譯

在C++裏傳遞數組永遠都是傳遞指向數組首元素的指針,編譯器不知道數組的大小。語言

若是想在函數內知道數組的大小,須要這樣作:進入函數後用memcpy將數組複製出來,長度由另外一個形參傳進去~~參數傳遞

代碼以下:new

fun (unsigned char *p1,int len)參數

{

unsigned char* buf = new unsigned char[len+1];

memcpy(buf,p1,len);

}

相關文章
相關標籤/搜索