关于memset函数

gergerman 2011-02-01 11:54:03
弱弱的问这个问题。上网搜了搜,发觉看不懂……
举个例,如果我想将一个二维数组a[10][10]全部置零,我应该怎么用呢?
memset(a,0,10*10)这样对吗?怎么我这样写好像达不到预期效果?
还有我想问问大家,如果用
for(i=0;i<10;i++)
for(j=0;j<10;j++)
a[i][j]=0;

这样操作,对比用memset函数,时间会节省吗??
谢谢大家指教
...全文
92 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
gergerman 2011-02-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 renxu350 的回复:]

memset() 第3个参数以字节为单位,
所以 a[10][10] 如果是 char a[10][10] 才能达到效果,
假如用 T 表示类型,并且 T a[10][10],
那么要达到效果可以这样写:
memset(a, 0, sizeof(T)*10*10);

另外这个循环与memset没有区别
因为数组的行与行之间的内存布局是顺序存储
[/Quote]


谢谢两位,学习了
bluejays 2011-02-02
  • 打赏
  • 举报
回复
memset的第三个参数是字节数。所以,如果a是char类型,用10*10就可以。如果a是int类型,那就应该是4*10*10,因为每个int都是4个字节。
比较保险的办法是memset(a,0,sizeof(a))

用循环自己清零,我觉得时间应该比memset慢一点,不过这点时间无所谓。这样循环肯定是正确的。
renxu350 2011-02-02
  • 打赏
  • 举报
回复
memset() 第3个参数以字节为单位,
所以 a[10][10] 如果是 char a[10][10] 才能达到效果,
假如用 T 表示类型,并且 T a[10][10],
那么要达到效果可以这样写:
memset(a, 0, sizeof(T)*10*10);

另外这个循环与memset没有区别
因为数组的行与行之间的内存布局是顺序存储

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧