java memset函数_memset函数及注意事项

本文介绍了memset函数的原型和头文件,强调使用该函数为数组赋值时,若不了解赋值原理可能产生隐形错误。它逐个字节赋值,若ptr指向char型地址,value可为任意字符值;若指向非char型地址,value只能是-1或0,并给出了正确和错误赋值示例。

memset函数的原型为:void * memset(void *ptr,int value,size_t num);用于为地址ptr开始的num个字节赋值value。

memset函数的头文件为:C:或    C++:。

在用memset为申请的数组赋值时,如果了解他的赋值原理,很有可能会造成一些不必要的隐形错误,令人头疼不已。memset函数在为数组(单个变量也可以)赋值时,是逐个字节赋值的,ptr开始的num个字节中的每个字节都赋值为value。所以我们就要注意了:

(1)若ptr指向的是char型地址,value可以为任意字符值。(因为一个字符占一个字节);

(2)若ptr指向的非char型地址(即最小存储单位不是一个字节的数据类型),如int型地址,要想赋值正确,value的值只能是-1或0,因为-1和0转换为二进制后每一位都是一样的,这里假设int型占四个字节,则-1=0XFFFFFFFF,0=0X00000000。

例:正确赋值:

int a[10];

memset(a,-1,sizeof(a));

d42fad2dbb21206c8d16262c83925e52.png

赋值后a中元素为:0xFF 0XFF 0XFF 0XFF。因为int型占四个字节,memset的赋值方式是逐个字节进行赋值,所以元素的值实际上是四个字节合在一起的值:0XFFFFFFFF=-1。

例:错误赋值:

int a[10];

memset(a,1,sizeof(a));

赋值后a中元素为:0X01 0X01 0X01 0X01,即:0X01010101=16843009。

ff719cca9d80bd1dcf9a1cf63fa67494.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值