6029|11

74

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

memset与 变量定义时初始化的 区别 [复制链接]

unsigned char pDATA[8];
memset(pDATA,0 ,8);

如果直接在定义处初始化为0,与memset的区别是 什么?

最新回复

对于严谨的编程,定义变量,肯定要初始化啊 memset只是在需要的时候用,比如一个循环里每次往一个数组填东西之前就应该memset一下  详情 回复 发表于 2010-5-26 09:29
点赞 关注

回复
举报

79

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
不一样,MEMSET是有长度的。直接给0就一位。基本上的区别就是这个。
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
如果 数组比较大 直接初始化太麻烦了  用 memset操作就很方便 而且在初始化 几位就几位
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 2 楼 jldream110 的回复:
如果 数组比较大 直接初始化太麻烦了 用 memset操作就很方便 而且在初始化 几位就几位

unsigned char pData[100]={0};

这样不麻烦啊。
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

5
 
作用是一样的,memset是string.c里的一个函数,你可以自己实现。
一般的操作是这样的:
程序刚始对其定义,就像你说的,unsigned char pData[100],赋0是没有必要的,因为里面的值可能在程序运行过程中不小心被改变,当真正要用这个数组的之前你就需要用memset(pData,0,100)了。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

6
 
那如果定义的是个结构体呢?变量定义初始化有的时候不太好用,而memset就比较好使了。
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(中级)

7
 
引用 5 楼 iamgooday 的回复:
那如果定义的是个结构体呢?变量定义初始化有的时候不太好用,而memset就比较好使了。

是啊,要是结构体,memset显然很方便。
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 4 楼 cretans 的回复:
作用是一样的,memset是string.c里的一个函数,你可以自己实现。
一般的操作是这样的:
程序刚始对其定义,就像你说的,unsigned char pData[100],赋0是没有必要的,因为里面的值可能在程序运行过程中不小心被改变,当真正要用这个数组的之前你就需要用memset(pData,0,100)了。

比如unsigned char pData[100]; 是在什么时候去分配空间,什么时候释放?
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

9
 
这个什么时候分配空间和变量的可见性有关吧。应该是c语言规范规定的吧?
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

10
 
楼主这种提问的方式不是很正确,你定义的数组初始化方式是要分上下文的。
如果是全局变量,编译器自动会帮你付初值。一般如果不指定值,就默认设置为0。原因是,对于全局变量,变量的地址是在编译期可以确定下来的。

但你如果定义的数组在函数内部(非静态),指定初值后,也是由编译器赋值,只是具体赋值操作在程序运行的过程中确定。原因是,函数内部定义的非静态变量,其地址是相对的,只有在运行时才能确定下来。

而楼主调用memset的方式来在运行时初始化数组的值,和在定义时给变量赋初值是两个概念,不能相提并论。
 
 
 

回复

99

帖子

0

TA的资源

一粒金砂(初级)

11
 
区别就是:一个是需要你自己的程序初始化成0,另一个是库函数帮你初始化!
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

12
 
对于严谨的编程,定义变量,肯定要初始化啊
memset只是在需要的时候用,比如一个循环里每次往一个数组填东西之前就应该memset一下
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表