我现在正在学习memset函数,但是所有的示例都涉及到char数组,如下所示:
char a[100];
memset(a, 0, 100);
它将把这个字符数组中的每个元素都设置为0。
我想知道memset是否适用于int数组或float数组?
是的,它可以应用于任何内存缓冲区,但您必须输入正确的内存缓冲区大小... memset
将任何内存缓冲区视为一系列字节,因此无论是 char
, int
, float
, double
等类型都没有关系。不过,请记住它不会将多字节类型设置为特定的非零值 ... 例如:
int a[100];
memset(a, 1, sizeof(a));
这段代码不会将a
的每个成员设置为1...而是会将a
占用的内存缓冲区中的每个字节都设置为1
。这意味着每个四字节的int
将被设置为0x01010101
,而不是0x00000001
。
a
的每个成员设置为1? - hola对于静态大小和可变长度的数组,你只需要
<arbitrary-type> foo [...];
memset (foo, 0, sizeof (foo)); // sizeof() gives size of entity in bytes
经验之谈: 永远不要硬编码[数据大小]。
(如果您将数组作为函数参数传递,则此方法无效:C语言中sizeof的行为)
它可以应用于任何数组。末尾的100是字节大小,因此一个整数每个占4个字节,所以就是 -
int a[100];
memset(a, 0, sizeof(a)); //sizeof(a) equals 400 bytes in this instance
memset
应用于struct
。只要您有写入权限,任何内存都可以。 - Stanchar a[100] = {};
呢? - user418748memset(a, 0, sizeof a)
将把a
的内容设置为全零字节。但是,除非a
是某种整数类型的数组(注意:char 是一种整数类型),否则不能保证将值设置为零。所有字节都为零很可能是浮点类型的 0.0 或指针类型的空指针的表示,但语言并不保证。要将对象初始化为全零,无论其类型如何,可以编写some_type a = { 0 };
。(某些编译器可能会警告缺少初始化程序,但未指定的元素 将 被设置为零。) - Keith Thompson