2011-09-29 46 views

回答

2

當大多數上下文中出現數組類型的表達式時,它會隱式轉換(「decays」)爲指針類型的表達式,其值是數組中第一個元素的地址。類似地,在函數參數聲明的上下文中(但在該上下文中僅爲),諸如T a[]T a[N]的聲明被解釋爲T *a;儘管數組符號,參數a是一個指針,而不是數組類型。

int arr[10]; 
... 
foo(arr); 

類型在調用foo表達arr的所以,有了代碼是「的int 10元件陣列」。在這種情況下,表達式的類型被轉換爲「指向int」,因此foo將收到一個指針值。

類似地,給定的一個函數定義

void foo(int a[10]) 
{ 
    ... 
} 

參數a的類型「的int 10元件陣列」,而是表示「指針int」。

簡而言之,您不能將數組參數傳遞給函數,並將其作爲數組類型接收;你得到的只是一個指針值。因此,必須或者將數組大小作爲單獨的參數傳遞,或者使用標記值終止數組(例如,使用char數組中的0來終止字符串)。當陣列表達顯示爲一個操作數,以任一sizeof或一元&運營商,或者如果它是一個字符串被用來初始化一個聲明另一個陣列


的此規則的例外是。

2

字符數組只如果它作爲一個空終止字符串被明確地處理與\0結束。一般來說數組中沒有終止字符,也沒有辦法知道數組的大小而不用傳遞大小。

4

在C中,有一個陣列和指向數據之間的差。當「將一個數組傳遞給一個函數」時,你實際上傳遞了一個指向該函數的指針。不幸的是,你可以不知道,如果一個指針指向一個元素,或元素的序列,而這是不可能告訴序列有多少個元素組成的。

另外,與一個字符串,一個int數組不與一個特定的值結束。

相關問題