2013-03-04 96 views
-3
void testSizeof(double array[]) 
    { 
     printf ("%i\n", sizeof(array)); 
    } 

當調用此函數時,輸出不是數組的長度。在調用函數中調用sizeof運算符時,會發生什麼情況?

爲什麼?

那麼,輸出的事實是什麼?

+3

您可以編寫一個簡單的示例應用程序,並自己找出它......它不是火箭科技 – Veger 2013-03-04 08:01:59

+0

它是系統中指針的大小。也許32位或64位... – deepmax 2013-03-04 08:04:52

+0

你從哪裏學習C,'sizeof'的部分沒有充滿關於指針衰減的警告? – Cairnarvon 2013-03-04 08:04:56

回答

5

它返回double指針的大小,即sizeof(double*)

當函數接受類型爲double[]的參數時,這與獲取類型爲double*的參數完全相同。該陣列被稱爲衰減成指針。

有關詳細說明,請參見What is array decaying?C FAQ

如果函數需要知道數組的大小,則必須顯式傳遞它。例如:

void testSizeof(double array[10]) {...} 

void testSizeof(double array[], size_t array_size) {...} 

在第一個例子中,陣列也subject to pointer decay。但是,由於您已經知道陣列的大小,因此您不需要使用sizeof()就可以知道。

不言而喻,第二種方法比第一種更靈活。

+0

第二個會好的,但第一個...(http://codepad.org/5kqzjvib)。謝謝,實際上我想知道sizeof操作符在功能定義時做了什麼。 – 2013-03-04 08:19:28

+0

@SimonLi:這不是我的意思。如果該函數採用'double [20]',它已經知道該數組有'20'個元素。它不需要'sizeof()'。無論如何,我已經更新了答案。 – NPE 2013-03-04 08:21:12

+0

哦,我明白了!所以,實際上輸出是sizeof(double *)? – 2013-03-04 08:30:35

相關問題