void testSizeof(double array[])
{
printf ("%i\n", sizeof(array));
}
當調用此函數時,輸出不是數組的長度。在調用函數中調用sizeof運算符時,會發生什麼情況?
爲什麼?
那麼,輸出的事實是什麼?
void testSizeof(double array[])
{
printf ("%i\n", sizeof(array));
}
當調用此函數時,輸出不是數組的長度。在調用函數中調用sizeof運算符時,會發生什麼情況?
爲什麼?
那麼,輸出的事實是什麼?
它返回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()
就可以知道。
不言而喻,第二種方法比第一種更靈活。
第二個會好的,但第一個...(http://codepad.org/5kqzjvib)。謝謝,實際上我想知道sizeof操作符在功能定義時做了什麼。 – 2013-03-04 08:19:28
@SimonLi:這不是我的意思。如果該函數採用'double [20]',它已經知道該數組有'20'個元素。它不需要'sizeof()'。無論如何,我已經更新了答案。 – NPE 2013-03-04 08:21:12
哦,我明白了!所以,實際上輸出是sizeof(double *)? – 2013-03-04 08:30:35
您可以編寫一個簡單的示例應用程序,並自己找出它......它不是火箭科技 – Veger 2013-03-04 08:01:59
它是系統中指針的大小。也許32位或64位... – deepmax 2013-03-04 08:04:52
你從哪裏學習C,'sizeof'的部分沒有充滿關於指針衰減的警告? – Cairnarvon 2013-03-04 08:04:56