一、函数作用 最简单的调用就是将一个数组清零,代码如下: const int maxn = 1024; int a[maxn];
最简单的调用就是将一个数组清零,代码如下:
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 实现原理是根据字节来设置的,比如对于字节数组char a[100],将所有字节都设置为5,就可以调用:
memset(a, 5, sizeof(a));
但是,对于int b[100],也采用这种方法,就会导致错误:
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));
对传参为数组的数据进行 memset,调用如下:
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
到此这篇关于C/C++ memset方法的误区的文章就介绍到这了,更多相关c++ memset方法内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: C/C++ memset方法的误区
本文链接: https://www.lsjlt.com/news/123613.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0