void *memset(void *dest,int c,size_t count)

首先按照惯例看看来自MSDN对参数的解释:

dest

Pointer to destination.

c

Character to set.

count

Number of characters.

最头疼的是第三个参数不知道该赋值多少?

记住通用的解法:

如果目标地址是 int 数组的指针ptr,则第三个参数应写成(sizeof(int)*数组的元素个数);

如:int  *a=new int[n];

       memset(a,0,sizeof(int)*n);

 bool *b=new int[n];

memset(b,false,sizeof(bool)*n);


sizeof()返回的是其参数所占的byte(字节)数,如sizeof(int)为4,sizeof(bool)为1;

比如上面的例子:

int  *a=new int[n];

memset(a,0,sizeof(int)*n);

memset对指针a所指向的空间以byte为单位,即对每个byte进行赋值为0,而第三个参数给出的是总的字节(byte)数,所以总共赋了sizeof(int)*n个0,每个byte赋值一个0。

倘若使用memset(a,1,sizeof(int)*n),期望让a所指向的数组中的每个元素赋值为1,那就错了,memset会从a所指向的地址的低位(即从右向左)开始,每一个byte就赋值为1,总共赋值了sizeof(int)*n个byte,所以计算一下a所指向的数组中的每个元素的值为16843009,即二进制为:00000001 00000001 00000001 00000001;

这可以通过下面的代码来分析:

int *a=new int[5];
cout<<sizeof(a)<<endl<<sizeof(bool)<<endl;
memset(a,0,sizeof(int)*5);
for(int i=0;i!=5;++i)
cout<<a[i]<<" ";
cout<<endl;


memset(a,1,5);
for(int i=0;i!=5;++i)
cout<<a[i]<<" ";
cout<<endl;


这就是memset,所以使用时要小心,用它来赋0值还是很实用的,以及用它来赋值字符(char)也很好用,但是要牢记它是以byte为单位进行赋值的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值