2013-04-20 70 views
-3
#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'的值都不一样。为了通过维护这些代码来获得相同的价值,还需要添加哪些代码或需要进行哪些更改?为什么我会得到不同的“a”值。要获得相同的价值,需要做些什么?

我不想更改任何函数的签名。在不更改签名的情况下,需要在func(int a[])内添加哪些额外的代码?

回答

4

数组函数参数衰减到指针,也就是说,参数funcint*类型。因此,您只能在func内计算sizeof(int*)

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

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

或初始化a包括一个标记值的标记阵列端,并通过元素迭代,直到找到该值在func

+0

嗨,我不想改变任何功能的签名。请在不改变签名的情况下说我需要在func()中添加额外的代码。 – 2013-04-20 13:43:09

+0

最常用的方法是更改​​函数签名。如果你真的无法做到这一点(比如说,因为它对家庭作业的限制),你必须尝试我的答案的第二部分提到的哨兵值方法。选择一个永远不会出现在数组中的值,并将最后一个值设置为这个值。然后'func'可以迭代数组元素,直到找到一个带有这个标记值的值。请注意,在调用'func'之前,所有数组元素都必须初始化,以便可靠地工作。 – simonc 2013-04-20 19:01:15

相关问题