一维数组传参的本质
数组我们之前学过了,之前也讲了,数组是可以传递给函数的,这个小节我们讨论一下数组传参的本质。
首先,我们从一个问题开始,我们之前都是在函数外部计算数组的元素个数,那我们可以把函数传给一个函数后,函数内部求数组的元素个数吗??
int main()
{int arr[10] = { 0 };int sz1 = sizeof(arr) / sizeof(arr[0]);printf("sz1=%d\n", sz1);test(arr);return 0;
}
我们发现在函数的内部是没有正确获得数组的元素个数的。
这就要学习数组传参的本质了,数组名是数组首元素的地址,那么在数组传参的时候,传递的是数组名,也就是说本质上数组传参传递的是数组首元素的地址。
所以函数形参的部分理论上应该使用指针变量来接受首元素的地址。那么在函数内部,我们写sizeof(arr),计算的是一个地址的大小,(单位字节),而不是数组的大小(单位字节),正是因为函数的参数部分的本质是指针,所以在函数内部是无法求数组元素个数的。
#include<stdio.h>
void test(int arr[])//看似传递的是数组形式,实际上还是指针
{int sz1 = sizeof(arr) / sizeof(arr[0]);printf("sz1=%d", sz1);}
void test2(int*arr)
{printf("%d ",sizeof(arr));}
int main()
{int arr[10] = { 0 };test(arr);test2(arr);return 0;
}
总结:一维数组传参,形参的部分可以写成数组的形式,也可以写成指针的形式