2015-05-05 38 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*的大小,而不是數組大小。

另一種方法是使用存儲數組大小的全局變量。但這是一個糟糕的主意。