【C 语言】数组 ( 一维数组形参退化 | 二维数组形参退化 | 函数形参等价关系 )
文章目錄
- 一、一維數組形參退化
- 二、二維數組形參退化
- 三、數組形參等價關系
一、一維數組形參退化
C 中將 一維數組 作為參數 , 傳遞到函數中 , 該 一維數組 會退化為 指針 ;
將
int array[10]數組 , 作為參數 , 傳遞到函數中 ,
void fun(int array[1000]){}與
void fun(int *array){}是等價的 , 函數中處理 array 數組時 , 不知道該數組的元素個數 , 編譯器只能確認 , 該參數是一個 int * 指針類型 ;
這樣操作是為了提高 編譯器 的效率 , 提高程序執行的效率 , 函數的 形參 最終要拷貝到 棧內存 中 ,
- 如果將整個數組作為形參 , 需要拷貝整個數組的內容 , 如果數組有 100010001000 個元素 , 需要拷貝 400040004000 字節 , 這樣效率就很低了 ;
- 如果只需要拷貝數組地址 , 這個地址存放在指針變量中 , 只需要傳遞 444 字節就可以了 ;
一維數組 形參 退化路徑 :
- int array[1000]
- int array[]
- int *array
二、二維數組形參退化
二維數組 作為 函數形參 , 也會退化為指針 ;
將 二維數組 看作 一維數組 ,
- 一維數組 中每個元素是 實際的數據 ,
- 二維數組 中每個元素是 一維數組 ;
一維數組 退化時 , 退化為 指向 一維數組元素 的 指針 ;
二維數組 退化時 , 退化為 指向 二維數組元素 的 指針 , 這個 二維數組元素 就是 一維數組 , 也就是退化為 指向 一維數組的指針 ;
特別注意 , 二維數組 退化的 指針 , 指向的 一維數組 是有效的 , 可以得到數組的元素個數 , 是一個正式的數組 ;
二維數組 形參 退化路徑 :
- int array[10][20]
- int array[][20]
- int (*array)[20] : 此處注意 , 數組指針 指向的 一維數組 是完整的數組 ;
三、數組形參等價關系
實參為 一維數組 int array[10] , 等效的 形參為 一級指針 int *array ;
- 一維數組 , 直接退化為 指向 數組元素的指針 , 數組元素是 普通類型 , 指向普通類型的指針 , 即 一級指針 ;
實參為 指針數組 int *array[10] , 等效的 形參為 一級指針 int **array ;
- 指針數組 是 數組的元素 都是 指針變量 ;
- 數組退化為 指針 , 指針指向的元素 也是 指針 , 則形參為 二級指針 ;
實參為 二維數組 int array[10][20] , 等效的 形參為 一級指針 int (*array)[20] ;
- 二維數組 的 數組的元素 是 一維數組 ;
- 外圍數組 ( 第二維 ) 退化為 指針 , 指針 指向的元素 是 一維數組 , 則形參為 指向 一維數組 的指針 , 每個一維數組有 202020 個元素 ;
總結
以上是生活随笔為你收集整理的【C 语言】数组 ( 一维数组形参退化 | 二维数组形参退化 | 函数形参等价关系 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C 语言】数组 ( 验证二维数组内存是
- 下一篇: 【C 语言】数组 ( 指针退化验证 |