一 数组作为函数的参数
-
用于传递数组中的某一个元素→意义不大
-
数组名当做函数实际参数
-
示例
- 代码
#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}; //调用已封装的函数PrintArr PrintArr(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]); //调用已封装的函数PrintArr PrintArr(arr,len); //下一行代码用于"在主函数里"测试原数组的相关参数 printf("在主函数测试,原数组的大小为:%d\n",sizeof(arr)); printf("在主函数测试,原数组的长度为:%d\n",len); return 0; }
- 结果