有沒有什麼辦法可以加快在C中獲取數組大小?C中有數組大小/長度的快捷方式嗎?
打字sizeof(array)/sizeof(int)
每次變老。是否有任何C庫有類似.length
或有某種方式可以將sizeof(array)/sizeof(int)
定義爲某種類型的較短常量(可能還使用點符號)?
有沒有什麼辦法可以加快在C中獲取數組大小?C中有數組大小/長度的快捷方式嗎?
打字sizeof(array)/sizeof(int)
每次變老。是否有任何C庫有類似.length
或有某種方式可以將sizeof(array)/sizeof(int)
定義爲某種類型的較短常量(可能還使用點符號)?
您可以使用sizeof(array)/sizeof(*array)
並使宏。
#define length(array) (sizeof(array)/sizeof(*(array)))
你總是可以只寫一個宏來做到這一點。請注意,它不能作爲函數使用,因爲您必須將數組降級爲指向其第一個元素的指針,所以它只會返回sizeof(int *)/sizeof(int)
。
#define INTSIZE(array) (sizeof(array)/(sizeof(int))
,或者更一般地說...
#define SIZE(array, type) (sizeof(array)/(sizeof(type))
哇,downvotes。好吧,這也將工作:
#define SIZE(array) (sizeof(array)/(sizeof((array)[0]))
-1不必要的類型 – 2010-11-29 20:51:11
要擴大Let_Me_Be的評論,你可以寫'的sizeof ARR/*的sizeof和arr`不用擔心在所有類型的*(雖然在宏觀的背景下,可能會更安全應該被寫作` (的sizeof(ARR)/ *的sizeof(ARR)`)。 – 2010-11-29 21:04:30
用C歸結爲宏所有的解決方案:
#define ARRAY_LENGTH(array) (sizeof((array))/sizeof((array)[0]))
簡短的回答是 「不」;在C中,沒有辦法根據單獨的數組表達式獲得數組中的元素數目。這個技巧大致和它的效果一樣好,它的使用僅限於數組類型的表達式。所以下面將不工作:
char *foo = malloc(1024);
size_t count = sizeof foo;
count
接收(在典型的桌面架構4)指針類型的字節數,而不是在分配的塊。
char arr[100];
char *p = arr;
size_t count = sizeof p;
同上。
void foo(char *arr)
{
size_t count = sizeof arr; // same as above
...
}
void bar(void)
{
char array[100];
foo(array);
...
}
同上。
如果你需要知道有多少元素是一個數組,你需要單獨跟蹤信息。
C的陣列治療是胃灼熱的lot的來源。
[C中是否有標準函數會返回數組的長度? ](http://stackoverflow.com/questions/1598773/is-there-a-standard-function-in-c-that-would-return-the-length-of-an-array) – 2010-12-11 06:39:13
C'S治療陣列是許多胃灼熱的來源。 – 2012-03-22 22:38:56