c 數組作爲形參時 該參數退化爲指針

版權聲明:本文爲博主原創文章,未經博主贊成不得轉載。 https://blog.csdn.net/xiewenbo/article/details/34419435

當數組作爲函數的形參的時候,該參數退化爲指針,並且是沒法直接求得數組的大小。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++; }

相關文章
相關標籤/搜索