的manpage說,大約memset
:memset如何通過-1初始化整數數組?
#include <string.h> void *memset(void *s, int c, size_t n)
的
memset()
函數填充的存儲區的第一n
字節指向s
與恆定字節c
。
很明顯,memset
不能用於初始化int
陣列,如下所示:
int a[10];
memset(a, 1, sizeof(a));
這是因爲int
由4個字節(比如說)表示,並且一個不能得到所期望的數組a
中整數的值。
但我經常看到程序員使用memset
將int
數組元素設置爲0
或-1
。
int a[10];
int b[10];
memset(a, 0, sizeof(a));
memset(b, -1, sizeof(b));
按我的理解,與整數0
初始化是可以的,因爲0
可以在1個字節(可能是我錯了,在這種情況下)來表示。但是如何用-1
(4字節值)初始化b
?
downvoter,小心解釋一下?這個問題與這個網站或別的東西無關嗎? – haccks
你用'0'初始化的原因是錯的。這是可以的,因爲'0'適合'unsigned char'(所以當它作爲memset的第二個參數使用時,它不會被截斷)*和*,因爲'sizeof(int)'字節在內存中的位模式零與sizeof(int)'連續的單字節零的內存中的位模式相同。這兩件事情都必須是真實的。事實上,這些事情對於兩個數字中的兩個數字是正確的:「0」和「-1」。 – zwol