一 數組作為函數的參數
-
用于傳遞數組中的某一個元素→意義不大
-
數組名當做函數實際參數
-
示例
- 代碼
#include <stdio.h>//封裝函數PrintArr void PrintArr(int arr[3]){int i;for(i=0;i<3;i++){printf("%d ",arr[i]);}putchar('\n');}//主函數 int main() { //初始化數組int arr[3]={78,56,43};//調用已封裝的函數PrintArrPrintArr(arr);return 0; }
- 結果
?
二 數組傳參中關于形式參數的秘密
- 數組形參會退化為指針
- 影響:
- 無法通過"sizeof(arr)"獲取原數組長度,其結果為指針大小(也就是數組首元素地址),通常為4或8字節
- 因此必須額外傳遞數組長度參數(如:int len),否則在原數組發生長度改變時無法正確遍歷數組
- 影響:
-
為使函數封裝具有通用性,增加了傳遞數組長度的參數len
- 代碼
#include <stdio.h>//封裝函數PrintArr void PrintArr(int arr[3],int len){int i;//循環:用于在封裝函數中遍歷輸出數組元素puts("數組里的元素為:");for(i=0;i<len;i++){printf("%d ",arr[i]);}puts("\n\n");//此部分代碼用于"在封裝函數里"測試數組的大小printf("在封裝函數測試,該數組的大小為:%d\n\n",sizeof(arr));}//主函數 int main() { //初始化數組int arr[3]={78,56,43};//定義用于傳遞數組長度的變量int len;len=sizeof(arr)/sizeof(arr[0]);//調用已封裝的函數PrintArrPrintArr(arr,len);//下一行代碼用于"在主函數里"測試原數組的相關參數printf("在主函數測試,原數組的大小為:%d\n",sizeof(arr));printf("在主函數測試,原數組的長度為:%d\n",len);return 0; }
- 結果