日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【C 语言】数组 ( 一维数组形参退化 | 二维数组形参退化 | 函数形参等价关系 )

發布時間:2025/6/17 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C 语言】数组 ( 一维数组形参退化 | 二维数组形参退化 | 函数形参等价关系 ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、一維數組形參退化
  • 二、二維數組形參退化
  • 三、數組形參等價關系





一、一維數組形參退化



C 中將 一維數組 作為參數 , 傳遞到函數中 , 該 一維數組 會退化為 指針 ;

int array[10]

數組 , 作為參數 , 傳遞到函數中 ,

void fun(int array[1000]){}

void fun(int *array){}

是等價的 , 函數中處理 array 數組時 , 不知道該數組的元素個數 , 編譯器只能確認 , 該參數是一個 int * 指針類型 ;


這樣操作是為了提高 編譯器 的效率 , 提高程序執行的效率 , 函數的 形參 最終要拷貝到 棧內存 中 ,

  • 如果將整個數組作為形參 , 需要拷貝整個數組的內容 , 如果數組有 100010001000 個元素 , 需要拷貝 400040004000 字節 , 這樣效率就很低了 ;
  • 如果只需要拷貝數組地址 , 這個地址存放在指針變量中 , 只需要傳遞 444 字節就可以了 ;

一維數組 形參 退化路徑 :

  • int array[1000]
void fun(int array[1000]) { }
  • int array[]
void fun(int array[]) { }
  • int *array
void fun(int *array) { }



二、二維數組形參退化



二維數組 作為 函數形參 , 也會退化為指針 ;


二維數組 看作 一維數組 ,

  • 一維數組 中每個元素是 實際的數據 ,
  • 二維數組 中每個元素是 一維數組 ;

一維數組 退化時 , 退化為 指向 一維數組元素指針 ;

二維數組 退化時 , 退化為 指向 二維數組元素指針 , 這個 二維數組元素 就是 一維數組 , 也就是退化為 指向 一維數組的指針 ;

特別注意 , 二維數組 退化的 指針 , 指向的 一維數組 是有效的 , 可以得到數組的元素個數 , 是一個正式的數組 ;


二維數組 形參 退化路徑 :

  • int array[10][20]
void fun(int array[10][20]) { }
  • int array[][20]
void fun(int array[][20]) { }
  • int (*array)[20] : 此處注意 , 數組指針 指向的 一維數組 是完整的數組 ;
void fun(int (*array)[20]) { }



三、數組形參等價關系



實參為 一維數組 int array[10] , 等效的 形參為 一級指針 int *array ;

  • 一維數組 , 直接退化為 指向 數組元素的指針 , 數組元素是 普通類型 , 指向普通類型的指針 , 即 一級指針 ;

實參為 指針數組 int *array[10] , 等效的 形參為 一級指針 int **array ;

  • 指針數組 是 數組的元素 都是 指針變量 ;
  • 數組退化為 指針 , 指針指向的元素 也是 指針 , 則形參為 二級指針 ;

實參為 二維數組 int array[10][20] , 等效的 形參為 一級指針 int (*array)[20] ;

  • 二維數組 的 數組的元素 是 一維數組 ;
  • 外圍數組 ( 第二維 ) 退化為 指針 , 指針 指向的元素 是 一維數組 , 則形參為 指向 一維數組 的指針 , 每個一維數組有 202020 個元素 ;

總結

以上是生活随笔為你收集整理的【C 语言】数组 ( 一维数组形参退化 | 二维数组形参退化 | 函数形参等价关系 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。