您不應該使用#defines
或const
變量來表示數組大小;最好讓他們明確。
代替:
#define TYPICAL_ARRAY_SIZE 4711
int fill_with_zeroes(char *array)
{
memset(array, 0, TYPICAL_ARRAY_SIZE);
}
int main(void)
{
char *za;
if((za = malloc(TYPICAL_ARRAY_SIZE)) != NULL)
{
fill_with_zeroes(za);
}
}
其使用(共享的,想象這是在一個共同的報頭或東西)#define
通信的陣列大小,這是更好的,只是它傳遞給功能作爲一個真正的參數:
void fill_with_zeroes(char *array, size_t num_elements)
{
memset(array, 0, num_elements); /* sizeof (char) == 1. */
}
然後,只需改變調用點:
int main(void)
{
const size_t array_size = 4711;
char *za;
if((za = malloc(array_size)) != NULL)
{
fill_with_zeroes(za, array_size);
}
}
這使得大小爲分配它的地方的本地大小,不需要被調用函數神奇地「知道」關於其參數通過其參數未傳達的內容。
如果數組是非動態分配的,我們可以做得更好,並刪除重複的符號大小甚至本地:
int main(void)
{
char array[42];
fill_with_zeroes(array, sizeof array/sizeof *array);
}
在此,公知的sizeof x/sizeof *x
表達式用於(在編譯時)計算數組中的元素數量。
C++常見問題精簡版有一個很好的簡短摘要:http://www.parashift.com/c++-faq-lite/newbie.html#faq-29.7 – Cubbi 2011-03-24 13:19:47
這個問題不應該要求C和C++相同時間。這些與編譯時間常量有很大不同。 – 2011-03-24 13:49:55