2013-02-10 36 views
1

我有一個函數,它在指向不同的陣列可以是這樣的:如何獲取無符號字符*數組中的元素數量?

unsigned char *arr[] = {0x34, 0x10, 0x3f, 0x00, 0x00 } 

我想知道的許多元素(字節)是如何每個陣列我的功能越來越英寸例如,我需要一種方法來發現這個數組有5個字節。我把它傳遞給一個函數來打印數組的值。 Sizeof(arr)不會給我正確的結果。

+3

你確定不應該是'unsigned char arr []'?或者你真的有這樣的指針嗎? – 2013-02-10 17:27:16

+1

'sizeof(arr)** **應該給出一個好結果。這只是你需要使用'unsigned char []'而不是'unsigned char * []'來聲明它。 (是的,我們正在操作**數組**和**而不是指針**,所以你將無法從函數中獲得正確的結果。) – 2013-02-10 17:28:03

+0

@alk我寫了其他的東西嗎? – 2013-02-10 17:29:36

回答

2

這是C.和在C這不存在。你必須在某個地方記住/存儲元素的數量。

+0

好的..謝謝:) – user2057841 2013-02-10 17:27:30

4

除非你使用像「數組以空字符結尾」這樣的約定(就像名義上的C字符串一樣),否則在運行時無法確定數組的大小。那時你所擁有的只是一個指針。

+0

好的,非常感謝! – user2057841 2013-02-10 17:27:59

+0

您可以在運行時絕對確定數組的大小 - 例如,'sizeof'適用於VLA。如果你將一個*指針*傳遞給一個數組並試圖獲得原始數組的大小,那麼是的,你運氣不好。 – 2013-02-10 17:28:06

+0

是的,這就是我想要做的,我想這是不可能的。 – user2057841 2013-02-10 17:30:38

0
sizeof(arr)/sizeof(unsigned char*) 

,你可以很容易的宏觀IZE這是

#define ARRAY_LENGTH(_array_) (sizeof(_array_)/sizeof(_array_[0]) 

順便說一句,這個,如果你在同一範圍內使用數組它只會工作。如果將數組傳遞給函數(並且數組降級爲指針),這將不起作用。如果將數組傳遞給函數,則需要傳遞數字元素以及每個元素的大小。

相關問題