1.使用原理
先来看看C标准库里面memset的源码
void *(memset)(void *s, int c, size_t n)
{
const unsigned char uc = c;
unsigned char *su;
for (su = s; 0 < n; ++su, --n)
*su = uc;
return (s);
}
可以看出,这个函数本身是为字符数组设计的,这也是为什么你调用memset需要包含cstring头文件的原因。
观察源码可以得出,c的值每次都会赋给一个字节,而不是一次性赋给四个字节,而int是四个字节,所以每次c的值都只会赋值给最低位的字节的内容。
举个例子:
如果你写memset(a,1,sizeof(int));而1的八位二进制是00000001
那么int类型数组a一个元素就会变成00000001000000010000000100000001,转成十进制也就
C++ memset深入解析:原理与基础应用

本文探讨了C++中memset函数的工作原理,解释了为何在使用memset为int数组赋值时可能出现意料之外的结果,并指出memset主要用于初始化字节单位的数组或结构体,特别是对于初始化为0或-1的情况。同时,文章还提醒读者memset是为字符数组设计,不适用于所有基础类型的正确赋值。
最低0.47元/天 解锁文章
2026





