memset

来源:互联网 发布:人活着的意义知乎 编辑:程序博客网 时间:2024/05/22 05:06
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
原创粉丝点击