C35-数组和函数开发初见
一 数组作为函数的参数
-
用于传递数组中的某一个元素→意义不大
-
数组名当做函数实际参数
-
示例
- 代码
#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; }
- 结果