c语言的memset函数
我现在正在研究memset函数,但所有示例都与char数组有关,如下所示:
char a[100]; memset(a, 0, 100);
它会将此char数组中的每个元素设置为0。
我想知道memset是否可以应用于int数组或float数组?
是的,它可以应用于任何内存缓冲区,但你必须输入正确的内存缓冲区大小… memset
将任何内存缓冲区视为一系列字节,因此无论是char
, int
, float
, double
等,都不是真的物。 请记住,它不会将多字节类型设置为特定的非零值…例如:
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
得到它? 🙂