为什么我得到“a”的不同值。要获得相同的价值需要做什么?

时间:2013-04-20 07:20:17

标签: c

#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[])内添加哪些额外代码?

1 个答案:

答案 0 :(得分:4)

数组函数参数衰减为指针,意味着func的参数类型为int*。因此,您只能在sizeof(int*)内计算func

如果要传递数组大小,可以将其作为单独的参数传递

func(a, sizeof(a)/sizeof(a[0]));
....
void func(int* a, int num_elems);

或初始化a以包含标记数组末尾的标记值并迭代元素,直到您在func中找到该值。

相关问题