2015-05-05 37 views
0
int mid_square(int z[],int length){ 
    int i,cnt=3,sum=0; 

    if (length%2 == 0) { //even length 
     length = (length+1)/2; 
    } 
    else{ //odd length 
     length = length/2; 
    } 

    for (i=length-2; i<=length+1; i++) { 
     sum+=z[i]*pow(10, cnt); 
     cnt--; 
    } 
    return sum; 
} 

在这段代码中,我使用长度作为函数的局部变量
但我不想使用可变长度
我能做些什么?
在我使用之前,length = sizeof(z)/ 4,但长度始终是相同的值。 (4 ?? 8 ??我不记得了)如何在C中获取数组[]的长度?

+0

这是因为当你将一个数组传递给一个函数时,它会衰变为一个指针。在指针上使用'sizeof'将返回指针的大小,而不是它指向的内容。 –

回答

1

一旦数组作为参数传递给函数,它会在调用期间衰减为指针,所以无法知道函数中数组的大小并且必须有一个额外的参数来指定数组的大小。

所以sizeof(z)的功能会给你sizeof(pointer)而不是sizeof(array)

1

您不能确定从函数的数组的大小,而无需使用另外一个参数表示的大小。这是因为在函数中,“数组”是int*

由于它是int*,因此sizeof运算符返回int*的大小,而不是数组大小。

另一种方法是使用存储数组大小的全局变量。但这是一个糟糕的主意。