先说结论,很遗憾,这已经被验证为是不可以的。
只能得到数组的第一个元素,如果想要使用,必须通过前面函数传参的形式,其实我是想验证形参指针接收数组的形式,不过这样验证更为方便。
这种现象似乎称为“数组指针衰减”。
#include<stdio.h>
int main()
{
int arr[5] = {1,2,3,4,5};
int *pArr = arr;
int i;
printf("sizeof(arr) = %d\r\n",sizeof(arr)); //20
printf("sizeof(*pArr) = %d\r\n",sizeof(*pArr));//4
printf("pArr = %d\r\n",pArr);//1703712
printf("&pArr = %d\r\n",&pArr);//1703708
printf("*pArr = %d\r\n",*pArr);//1 很明显,这里得到了数组的第一位
printf("sizeof(&*pArr) = %d\r\n",sizeof(&*pArr));//4 sizeof(地址),得到4,很正常
printf("&*pArr = %d\r\n",&*pArr);//1703712
printf("(&*pArr)[0] = %d\r\n",(&*pArr)[0]);//1
for(i=0; i<sizeof(&*pArr)/sizeof(*pArr);i++){
//printf("%d");
}
return 0;
}
可参考,下面文章理解:
c - Finding length of array inside a function - Stack Overflow