當數組作爲函數的形參的時候,該參數退化爲指針,並且是沒法直接求得數組的大小。css
傳數組給一個函數。數組類型本身主動轉換爲指針類型,於是傳的實際是地址。
void func(int array[10])
void func(int array[])
void func(int *array)
因此以上三種函數聲明全然等同。html
實際狀況是,數組作參數,全然沒法按值傳遞。數組
這是由C/C++函數的實現機制決定的。
函數
一般計算數組大小的方式例如如下:post
int len = sizeof(arr)/sizeof(type)spa
利用總長度和單個元素的長度關係獲得數組的長度.net
但作爲形參後,sizeof(arr)的長度總爲4,即一個指針的長度。指針
爲此,有兩種方法來解決問題:htm
方法1.blog
參數傳遞的時候,直接加上一個參數作爲數組的長度
方法2.(是錯誤的)
int *p = a[0]; int iLen = 0; while(p != NULL) { iLen++; *p++; }