c语言的memset函数

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

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

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

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

是的,它可以应用于任何内存缓冲区,但你必须输入正确的内存缓冲区大小… memset将任何内存缓冲区视为一系列字节,因此无论是charintfloatdouble等,都不是真的物。 请记住,它不会将多字节类型设置为特定的非零值…例如:

 int a[100]; memset(a, 1, sizeof(a)); 

不会将a的每个成员设置为值1 …而是将内存缓冲区中的每个字节设置为1 ,这意味着每个四字节的int将被设置为值0x01010101 ,这不是与0x00000001相同

对于静态大小和可变长度的数组,您可以

  foo [...]; memset (foo, 0, sizeof (foo)); // sizeof() gives size of entity in bytes 

经验法则:永远不要硬编码[数据大小]。

(如果将数组作为函数参数传递,则不起作用: C中Sizeof的行为 )

它可以应用于任何arrays。 最后的100是以字节为单位的大小,因此每个整数将是4个字节,所以它将是 –

 int a[100]; memset(a, 0, sizeof(a)); //sizeof(a) equals 400 bytes in this instance 

得到它? 🙂