我现在正在研究 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 ...而是将设置为to占用的内存缓冲区中的每个字节,这意味着每四个字节都将设置为 value ,这与a
1
int
0x01010101
0x00000001
它可以应用于任何数组。最后的 100 是以字节为单位的大小,所以一个整数每个是 4 个字节,所以它是 -
int a[100];
memset(a, 0, sizeof(a)); //sizeof(a) equals 400 bytes in this instance
得到它?:)
对于静态大小和可变长度的数组,您可以
<arbitrary-type> foo [...];
memset (foo, 0, sizeof (foo)); // sizeof() gives size of entity in bytes
经验法则:永远不要硬编码 [数据大小]。
(如果您将数组作为函数参数传递,这将不起作用:C 中 Sizeof 的行为)