我在论坛上找到了不用sizeof求数组大小的方法,但是如果我将这个办法封装
成函数,返回的数字完全是错的,不知道为什么,求仙人指路
int mysizeof(int arr[]);
int mysizeof(int arr[])
{
int*pp1=*(&arr+1);
int pp2 = pp1-arr;
return pp2;
}
int main()
{
int a[] = {1,2,3,4,5,6,7};
int * p = *(&a+1);
int p2 = p-a;
int pp = mysizeof(a);
printf("%p\t%p\t\n",a+1,p);
printf("%d",p2);
printf("\n********************************************\n");
printf("%d",pp);
return 0;
}
为什么这个函数不能封装啊,自定义函数中的值到底发生了什么?
在线等
但是同样的写法在main里为什么能够正确计算?是不是因为传递进函数之后arr是一个副本,在main中的时候&arr的类型是具有长度属性的,+1之后就移动了整个数组的长度,但是在自定义函数中arr只是一个指向main函数中数组首元素的地址的一个指针,而不具备长度属性,或者说长度属性退化掉了?所以在自定义函数中&arr+1不能明确知道指针具体偏移了多少,是这个意思吗?还是不太明白