我試過用sizeof(array)/sizeof(int)
,但似乎如果我通過了陣列到另一個函數,這並不工作。那麼有沒有其他方法可以知道數組的大小?如何獲取函數中的數組大小而不計算長度或將其作爲參數傳遞?
順便說一句:我知道一個char[]
與'\0'
結束;哪個字符結束int[]
?
我試過用sizeof(array)/sizeof(int)
,但似乎如果我通過了陣列到另一個函數,這並不工作。那麼有沒有其他方法可以知道數組的大小?如何獲取函數中的數組大小而不計算長度或將其作爲參數傳遞?
順便說一句:我知道一個char[]
與'\0'
結束;哪個字符結束int[]
?
當大多數上下文中出現數組類型的表達式時,它會隱式轉換(「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
或一元&
運營商,或者如果它是一個字符串被用來初始化一個聲明另一個陣列
的此規則的例外是。
字符數組只如果它作爲一個空終止字符串被明確地處理與\0
結束。一般來說數組中沒有終止字符,也沒有辦法知道數組的大小而不用傳遞大小。
在C中,有一個陣列和指向數據之間的差。當「將一個數組傳遞給一個函數」時,你實際上傳遞了一個指向該函數的指針。不幸的是,你可以不知道,如果一個指針指向一個元素,或元素的序列,而這是不可能告訴序列有多少個元素組成的。
另外,與一個字符串,一個int數組不與一個特定的值結束。