您的位置:首页 > 其它

fill和memset 数组填充跟数组初始化

2017-04-27 16:53 337 查看
一般我们在使用memset来初始化数组,但是昨天在做一道题时,死活出错,原因在于我想把一个int数组初始化为最大整型数,下面是memset函数原型

void *memset(void *s, int ch, size_t n)
功能是:(直接从百度百科抄过来)
将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值,
第一个值为指定的内存地址,块的大小由第三个参数指定,
这个函数通常为新申请的内存做初始化工作,
其返回值为指向s的指针

注意:这边是对前n个字节进行赋值,而且还是ASCII的形式,那就是说,对于字符数组,可以将其初始化为任意一个字符,那对于其他基础类型的数组呢?
那只能说一声抱歉了,因为memset按字节对内存块进行初始化,所以他无法对int数组初始化除了0和-1以后的其他数
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[20];
int b[20];
int c[20];
int d[20];
memset(a,0,sizeof(a)); //right 初始化为0
memset(b,-1,sizeof(b)); //right 初始化为-1
memset(c,1,sizeof(c)); //wrong
memset(d,2,sizeof(d)); //wrong
for(int i=0;i<10;i++) cout<<a[i]<<" "; cout<<endl;
for(int i=0;i<10;i++) cout<<b[i]<<" "; cout<<endl;
for(int i=0;i<10;i++) cout<<c[i]<<" "; cout<<endl;
for(int i=0;i<10;i++) cout<<d[i]<<" "; cout<<endl;
return 0;
} 这个例子输出结果为:



所以小伙伴们在使用memset函数要注意这些
接下来介绍 fill函数
函数参数 fill(first,last,val)
first,last 对应数组的范围,val为元素的值
fill 顾名思义 这个函数是用来填充的,例如我们想对一个数组赋值,那么
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[20];
int b[20];
char c[20];
float d[20];
fill(a,a+11,1); //赋值1
fill(b,b+11,2147483647); //赋值最大整型 2147483647
fill(c,c+11,'*'); //赋值 *
fill(d,d+11,0.1); //赋值 0.1
for(int i=0;i<10;i++) cout<<a[i]<<" "; cout<<endl;
for(int i=0;i<8;i++) cout<<b[i]<<" "; cout<<endl;
for(int i=0;i<10;i++) cout<<c[i]<<" "; cout<<endl;
for(int i=0;i<10;i++) cout<<d[i]<<" "; cout<<endl;
return 0;
} 运行结果为:



所以当我们想对数组赋值时,使用fill 函数还是比较方便的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: