我有一個函數,它在指向不同的陣列可以是這樣的:如何獲取無符號字符*數組中的元素數量?
unsigned char *arr[] = {0x34, 0x10, 0x3f, 0x00, 0x00 }
我想知道的許多元素(字節)是如何每個陣列我的功能越來越英寸例如,我需要一種方法來發現這個數組有5個字節。我把它傳遞給一個函數來打印數組的值。 Sizeof(arr)不會給我正確的結果。
我有一個函數,它在指向不同的陣列可以是這樣的:如何獲取無符號字符*數組中的元素數量?
unsigned char *arr[] = {0x34, 0x10, 0x3f, 0x00, 0x00 }
我想知道的許多元素(字節)是如何每個陣列我的功能越來越英寸例如,我需要一種方法來發現這個數組有5個字節。我把它傳遞給一個函數來打印數組的值。 Sizeof(arr)不會給我正確的結果。
除非你使用像「數組以空字符結尾」這樣的約定(就像名義上的C字符串一樣),否則在運行時無法確定數組的大小。那時你所擁有的只是一個指針。
好的,非常感謝! – user2057841 2013-02-10 17:27:59
您可以在運行時絕對確定數組的大小 - 例如,'sizeof'適用於VLA。如果你將一個*指針*傳遞給一個數組並試圖獲得原始數組的大小,那麼是的,你運氣不好。 – 2013-02-10 17:28:06
是的,這就是我想要做的,我想這是不可能的。 – user2057841 2013-02-10 17:30:38
sizeof(arr)/sizeof(unsigned char*)
,你可以很容易的宏觀IZE這是
#define ARRAY_LENGTH(_array_) (sizeof(_array_)/sizeof(_array_[0])
順便說一句,這個,如果你在同一範圍內使用數組它只會工作。如果將數組傳遞給函數(並且數組降級爲指針),這將不起作用。如果將數組傳遞給函數,則需要傳遞數字元素以及每個元素的大小。
你確定不應該是'unsigned char arr []'?或者你真的有這樣的指針嗎? – 2013-02-10 17:27:16
'sizeof(arr)** **應該給出一個好結果。這只是你需要使用'unsigned char []'而不是'unsigned char * []'來聲明它。 (是的,我們正在操作**數組**和**而不是指針**,所以你將無法從函數中獲得正確的結果。) – 2013-02-10 17:28:03
@alk我寫了其他的東西嗎? – 2013-02-10 17:29:36