我正在研究memset函数,但所有示例都与char数组有关:
char a[100];
memset(a, 0, 100);
它会将此char数组中的每个元素设置为0。
我想知道memset是否可以应用于int数组或float数组?
答案 0 :(得分:43)
是的,它可以应用于任何内存缓冲区,但是您必须输入正确的内存缓冲区大小... memset
将任何内存缓冲区视为一系列字节,因此它是char
,{ {1}},int
,float
等并不重要。请记住,它不会将多字节类型设置为特定的非零值...例如:
double
将不将int a[100];
memset(a, 1, sizeof(a));
的每个成员设置为值1 ...而是将{em>内容缓冲区中的每个字节设置为{{ 1}}到a
,这意味着每个四字节a
将设置为值1
,这与int
答案 1 :(得分:1)
它可以应用于任何阵列。最后的100是以字节为单位的大小,因此每个整数将是4个字节,因此它将是 -
int a[100];
memset(a, 0, sizeof(a)); //sizeof(a) equals 400 bytes in this instance
得到它? :)
答案 2 :(得分:1)
对于静态大小和可变长度的数组,您只需
<arbitrary-type> foo [...];
memset (foo, 0, sizeof (foo)); // sizeof() gives size of entity in bytes
经验法则 绝不硬编码[数据大小]。
(如果将数组作为函数参数传递,则不起作用:Behaviour of Sizeof in C)