关于memset的一些东西

之前只是知道memset一般只用来赋初值,后来一次看cplusplus看到了关于memset的描述,发现它是将设定的值怎么转化成字符..但是当时很迷,有很偶然的机会看到了下面的文章,觉得还好,放在这里做个记录吧~

 

 

 

读一下下段程序段,你认为f中执行下列语句后会出现什么值呢?

 

 

 

当然,首先想到的一定是1.f中的值都被赋为了1。

memset(f,0,sizeof(f))能够实现对f的清0工作。

 

但是你要是运行上述程序段,你会发现你的想法完全错了。输出的结果是16843009!!!输出的是乱码?让我们看看memset的函数原型:

 

 

其实memset是对每个字节赋值,而我们给赋值的是int型的数据,有四个字节,所以数组f中的每个数据被赋作了00000001000000010000000100000001,也就是十进制的16843009.

而对0,赋值的时候,赋成0x0000,还是0;对-1赋值为0xFFFF,与F没多大区别,都是-1的补码。所以这两个特殊值不会有错。

关于NULL,/0:

stdio.h中有这句:

#define NULL 0

NULL在编译时都转换为0了;

/0是ascll码中编号为0的那个字符,也就是(int)(/0)==0;

所以memset(a,’/0’,sizeof(a))也是对的。

要对其他值进行赋值,还是用循环赋值更方便些,memset就帮不了什么忙了。

 

转自 http://blog.163.com/wuzi_@126/blog/static/73817283200893175543889/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值