memset

memset使用方法及注意事项
一,memset(数组名,数据,sizeof(数组名))  是将数组内存中的所有元素设置为特定的值;
 
以int为例
若第二参数为0,数组全部元素改为0;
若第二参数大于0,数组全部元素改为正无穷(可以暂且理解成无穷);
若第二参数为-1,数组全部元素改为-1;
若第二参数小于-1,数组全部元素改为负无穷。
二,memset(数组名,数据,字节总数)  或 memset(数组名,数据,n*sizeof(数据类型)) 
可以指定覆盖数组中前n个元素的值
字节数代表着覆盖n个字符的总字节数, 字节数必须是以下各类型所占字节数的整倍数
char 1个字节
bool  1个字节
int 4个字节
long long  8个字节
double  8个字节

另:sizeof() 作用就是返回一个对象或者类型所占的内存字节数。
如:
#include <iostream>
#include <cstring>
using   namespace  std ;
int  main ()
{
int  a [ 30 ];
memset ( a , 0 , sizeof ( a ));
memset ( a ,- 1 , 12 );
for ( int  i = 0 ; i <= 25 ; i ++)
cout << a [ i ]<< ' ' ;
return   0 ;
}

输出的则是前三个为-1,后23个是0的数列;

memset(a,-1,12)还可以写成memset(a,-1,3*sizeof(int))。
 
sizeof后如果是类型必须加括号,如果是变量名可以不加括号,这是因为sizeof是个操作符而不是函数。
三,常见错误
1.搞反数据和字节总数的位置
2.过度使用memset
如:
#include <cstdio>
#include <cstring>
int  main ()  
{  
int  a [ 30 ];  
memset ( a , 0 , 80 );  
for ( int  i = 0 ; i < 20 ; i ++)  
scanf ( "%d" ,& a [ i ]);  
for ( int  i = 0 ; i < 20 ; i ++)  
printf ( "%d " , a [ i ]);  
return   0 ;  
}

这里的memset是多余的. 因为这块内存马上就被全部覆盖,清零没有意义.


值得注意的一点:
在使用字符数组时,sizeof(char数组名)返回的是整个数组所占字节总数,而strlen(char数组名)返回的则是字符数组中‘/0’之前的元素所占字节总数。
例如,
char ch [ 20 ]= "0123456789" ;
int a = sizeof ( ch ), b = strlen ( ch );
//结果a=20而b=10
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值