栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C/C++初始化字符数组的方式对比,{0}是否存在问题?

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C/C++初始化字符数组的方式对比,{0}是否存在问题?

前言:

一般我们在C/C++中有两种常见的初始化字符数组的方式,如下:

//第一种
char szBuff[64] = {0};

//第二种
char szBuff[64];
memset(szBuff,0,sizeof(szBuff));

那么这两种谁更优?谁更安全?一般稳健一点的人可能会选择使用后者,毕竟自己memset了,有的人可能认为第一种方式只是将第一个字符置空,而其他位置并未初始化,这样写效率高。其实并非如此,让我们从汇编层面来分析一下。

分析过程:

第一种:

char szBuff[64] = {0};

对应的汇编代码如下:

00191013  mov         byte ptr [ebp-48h],0  
00191017  push        3Fh  
00191019  push        0  
0019101B  lea         eax,[ebp-47h]  
0019101E  push        eax  
0019101F  call        memset (191854h)  
00191024  add         esp,0Ch 

第二种:

char szBuff[64];
memset(szBuff,0,sizeof(szBuff));

对应的汇编代码如下:

00191027  push        40h  
00191029  push        0  
0019102B  lea         ecx,[ebp-88h]  
00191031  push        ecx  
00191032  call        memset (191854h)  
00191037  add         esp,0Ch  

结论:

其实本质上而言,两种方式最终都是通过调用memset来实现清0的,只是细微上有点点差别(当然如果字符数组很短的话,第一种方式并不一定会调用memset,而是采用多个mov来清零),总之两种方式都保证了所有的空间全部被清零了。

两种方式都可以放心使用,完全看个人喜好,但本人推荐第一种方式,优雅,但个人认为可读性稍差,菜鸟看到了未必理解。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/928394.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号