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 函数还是比较方便的
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 函数还是比较方便的
相关文章推荐
- 谁来解答下!!memset,for,while,fill()初始化数组的效率对比...
- 关于memset初始化填充数组。
- 【C++】别再用memset初始化int数组了,用fill或者fill_n靠谱多了
- java 快速初始化,填充一个数组, Arrays.fill
- fill 与memset 给整个数组赋值
- [转]用memset初始化数组为1出错
- fill 与memset 给整个数组赋值
- int数组为什么一般不能用memset初始化每个元素
- 初始化测试,memset,for,fill
- C++语言复习七 数组的memset初始化 void指针的用法 举例
- memset 初始化数组
- 动态分配内存 and malloc&new and 数组的动态分配、初始化(memset)和撤销(delete)
- fill数组填充
- fill 与memset 给整个数组赋值
- 字符串数组初始化0 与memset 0 效率的分析
- memset 函数, fill函数的区别及应用, fill函数给多维数组赋值。
- 为什么memset不能将数组元素初始化为1?(急)
- 为什么memset不能将数组元素初始化为1?
- java中数组的初始化(Arrays.fill())
- fill 与memset 给整个数组赋值