2016-03-30 150 views
0

作爲更大任務的一部分我試圖打印C中數組的長度,即數組中有多少個元素。該數組是雙精度數組,我想打印一個整數,即數組中有多少雙精度。 我有這樣的代碼:c打印陣列長度

int array_length(double array[]) { 
    double length = 0; 
    length = sizeof(array)/sizeof(double); 
    printf("%G", length); 
    return 0; 
} 

我這樣稱呼它主要是這樣的:

int main(void) { 
    double test[] = {1.1,2.2,3.3,4.4,5.5}; 
    array_length(test); 
    return 0; 
} 

然而,這將返回錯誤:

error: ‘sizeof’ on array function parameter ‘array’ will return size of ‘double *’ [-Werror=sizeof-array-argument]

研究已經告訴我,

sizeof(array)/sizeof(double); 

會給我一個數組的長度,我試圖用「%G」來讓我打印這個代碼返回的double。我相信「double *」意味着長雙倍,所以我嘗試將「%G」更改爲「%LG」,將「double」改爲「long double」的所有用途,但這並不能解決問題。這裏發生了什麼?

+0

使用'%zu'打印'size_t'值 – LPs

+0

謝謝大家的回答,我現在看到了這個問題。如果我找到解決方案,我會繼續嘗試並返回:) – Isaac

回答

0

sizeof只能計算數組的大小,如果它的大小在該範圍內是已知的。例如: -

double array[10]; 
printf("%d", sizeof(array)/sizeof(double)); // prints 10 

但是:

void printSize(double array[]) { 
    printf("%d", sizeof(array)/sizeof(double)); // doesn't print 10 
} 

因爲這裏double array[]只是語法糖double* array

1

數組在函數參數中被腐蝕成指針,因此您無法從該函數中找到數組的大小。

您必須將數組大小作爲參數傳遞。

+0

「您必須將數組的大小作爲參數傳遞。」這是OP想要計算的! – CinCout

+0

@HappyCoder我知道,我只是說他必須以某種方式提供尺寸,因爲他無法從指針計算。 – blazs

+0

其中C「看到」數組的原始數組形式(即在'main'()')中,數組大小實際上很容易計算 - 而OP似乎知道如何完成。 – tofro