如果我们通过函数的参数将一个数组传递到参数中去,那么在函数里接收到的是什么东西呢?我们知道如果传递一个普通变量,那么参数接收到的是值,如果传递一个指针变量,参数接收到的也是值,只不过这时的值是地址。那么数组是什么?将数组作为值传给一个函数,在函数的参数里有一个数组变量来接收这个数组,看下到底接收到数组变量的什么东西呢?以minmax作为例子来测试下:
在minmax函数中能不能计算出数组a的个数?在minmax和main中分别添加printf函数,从结果可以看出,在main里a的大小是68,而在minmax函数中数组a的大小为8,8是什么,在64位机器下,8刚好和一个指针的大小是一样的,和地址的大小是一样的。
1 #include <stdio.h> 2 void minmax(int a[],int len,int *max,int *min); 3 4 int main(void) { 5 int a[]={1,2,3,4,5,6,7,8,9,12,13,14,16,17,21,23,55}; 6 int min,max; 7 printf("main sizeofa[]= %lu\n",sizeof(a)); //sizeof a in main 8 minmax(a,sizeof(a)/sizeof(a[0]),&min,&max); 9 printf("min=%d,max=%d\n",min,max); 10 return 0; 11 } 12 13 void minmax(int a[],int len,int *min,int *max){ 14 int i; 15 printf("minmax sizeofa[]= %lu\n",sizeof(a)); //sizeof a in minmax 16 *min =*max=a[0]; 17 for(i=1;i<len;i++){ 18 if(a[i]<*min){ 19 *min=a[i]; 20 } 21 if(a[i]>*max){ 22 *max=a[i]; 23 } 24 } 25 }