#include<stdio.h>
void func(int x[]);
main()
{
int a[]={1,2,3,4};
printf("size of %d \n",sizeof(a)); // Some value I'm getting
func(a);
}
void func(int a[])
{
printf("size of %d",sizeof(a)); // Value is changing
}
两次,'a'的值都不是相同的。要通过维护此代码获得相同的值,还需要添加更多代码或需要进行哪些更改?
我不想更改任何功能的签名。在不更改签名的情况下,需要在func(int a[])
内添加哪些额外代码?
答案 0 :(得分:4)
数组函数参数衰减为指针,意味着func
的参数类型为int*
。因此,您只能在sizeof(int*)
内计算func
。
如果要传递数组大小,可以将其作为单独的参数传递
func(a, sizeof(a)/sizeof(a[0]));
....
void func(int* a, int num_elems);
或初始化a
以包含标记数组末尾的标记值并迭代元素,直到您在func
中找到该值。