揭秘memset与sizeof的结合使用方法
memset与sizeof为什么经常结合起来用呢?
一.memset介绍
memset函数是C++中的一个函数,它将从给定地址开始,逐个字节刷内存,初始化它们为给定的参数。
基本用法:
void * memset ( void * ptr, int value, size_t num );
因为它是逐字节地刷内存,所以参数num
经常用sizeof()的方式写。
二.具体事例
1. 例1
char str[] = "almost every programmer should know memset!";
memset (str,'-',6);
puts (str);
输出:
------ every programmer should know memset!
这里memset的第三个参数是6,也就是从首位&str[0]开始,到&str[5],全部替换为-,不过这里恰好是char类型在该系统上占内存1个字节,但换个系统假如是3个字节那么6可能就要缩水了,就只能把字符串的前两位,即al,替换成-。
2. 例2
int *B=new int[3];
memset(B,-1,sizeof(B)); //错误
memset(B,-1,sizeof(B)*3); //正确
以上是一段动态定义数组的方式,暂且认为在内存中连续存储(仅限这种申明方式),且使用了memset进行赋值。
显然,错误的方法没有意识到sizeof(B)并不是整个数组的占内存大小,而是指针所占内存大小。因为我们认为如果指针所占内存大小等于int类型所占内存大小的话,那么在sizeof完了指针,还是乘上数组的长度。同理,二维数组与动态存储(仅限这种申明方式)二位数组。
keep going
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· PPT革命!DeepSeek+Kimi=N小时工作5分钟完成?
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
· 程序员转型AI:行业分析