17

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

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

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

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

4

3 回答 3

45

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

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

不会的每个成员设置a为值 1 ...而是将设置为to占用的内存缓冲区中的每个字节,这意味着每四个字节都将设置为 value ,这与a1int0x010101010x00000001

于 2011-07-25T12:56:23.937 回答
1

它可以应用于任何数组。最后的 100 是以字节为单位的大小,所以一个整数每个是 4 个字节,所以它是 -

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

得到它?:)

于 2011-07-25T12:55:45.940 回答
1

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

<arbitrary-type>  foo [...];
memset (foo, 0, sizeof (foo)); // sizeof() gives size of entity in bytes


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

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

于 2011-07-25T13:05:22.203 回答