c语言的memset函数

时间:2011-07-25 12:54:17

标签: c arrays memset

我正在研究memset函数,但所有示例都与char数组有关:

char a[100];
memset(a, 0, 100);

它会将此char数组中的每个元素设置为0。

我想知道memset是否可以应用于int数组或float数组?

3 个答案:

答案 0 :(得分:43)

是的,它可以应用于任何内存缓冲区,但是您必须输入正确的内存缓冲区大小... memset将任何内存缓冲区视为一系列字节,因此它是char,{ {1}},intfloat等并不重要。请记住,它不会将多字节类型设置为特定的非零值...例如:

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