memset 作为对内存初始化的函数,还是有不少坑和误区的,今天就来对这个函数作一个总结。避免后期使用不当踩入坑。
最简单的调用就是将一个数组清零,代码如下:
const int maxn = 1024;
int a[maxn];
memset(a, 0, sizeof(a)); // 结果:a[0]=a[1]=a[...]=0;
直接调用 memset 接口清零 和 调用循环进行清零,进行一个测试后如下:
对长度为 10000000 的数组,执行100次调用;
模式 | memset | for |
---|---|---|
debug | 375ms | 2156ms |
release | 343ms | 329ms |
memset(a, 5, sizeof(a));
memset(b, 5, sizeof(b));
memset值 | char | short | int | long long |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
-1 | -1 | -1 | -1 | -1 |
5 | 5 | 1285 | 84215045 | 361700864190383365 |
memset(a, 0x05ffffff, sizeof(a));
memset(a, 0xffffff05, sizeof(a));
memset(a, 0xffffff08, sizeof(a));
memset(a, 0x12345678, sizeof(a));
memset(a, 0xff, sizeof(a));
memset(a, 0x05, sizeof(a));
memset(a, 0x08, sizeof(a));
memset(a, 0x78, sizeof(a));
在堆上申请了一个数组空间,并且想要给它初始化,调用如下:
const int maxn = 1024;
int *p = new [maxn];
memset(p, 0, sizeof(p));
const int maxn = 1024;
int *p = new [maxn];
memset(p, 0, maxn * sizeof(int));
void fun(int a[maxn])
{
memset(a, 0, sizeof(a));
}
void fun(int a[maxn])
{
memset(a, 0, maxn * sizeof(int));
}
参考于:CSDN- 英雄哪里出来https://blog.csdn.net/WhereIsHeroFrom/article/details/111660632
原文:https://www.cnblogs.com/lcgbk/p/14660512.html