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
阅读全文
1 0
- memset
- memset
- memset
- memset
- memset
- memset
- memset
- memset
- memset
- memset
- memset
- memset
- memset
- memset
- memset
- memset
- memset
- memset
- 2017/7/17~2017/8/7的总结
- qt开发环境
- netty(五) NIO创建的TimerServer源码分析之客户端
- low powder design
- 2017.8.10
- memset
- 调整数组顺序使得奇数位于偶数前面
- strcpy与strncpy
- 【干货】程序员总结java学习工作需要的1000+英语单词带解释!
- 我的微信小程序项目进入测试啦
- PCM A律μ律编码
- 初识JS定时器
- 引用
- Kotlin