memset函数
原型:
void *memset(void *s, int ch, size_t n)
功能是:
将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值, 第一个值为指定的内存地址,块的大小由第三个参数指定,
这个函数通常为新申请的内存做初始化工作, 其返回值为指向s的指针。
注意:这边是对前n个字节进行赋值,而且还是ASCII的形式,那就是说,对于字符数组,可以将其初始化为任意一个字符,那对于其他基础类型的数组呢?
那只能说一声抱歉了,因为memset按字节对内存块进行初始化,所以他无法对int数组初始化除了0和-1以外的其他数,但可以初始化为无穷大0x3f3f3f3f
#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
return 0;
}
memset可以对char型数组初始化成任何字符:
char a[5][100];
memset(a,'A',sizeof(a));
for(int i=0;i<4;i++){
cin>>a[i];
a[i][strlen(a[i])]='0';///输入a[i]后,a[i][strlen(a[i])]该位置是为空白的,并不是'A',若要除输入的a[i]外其余位置全部填充赋值为'A',则要加一句a[i][strlen(a[i])]='A';
}
for(int i=0;i<4;i++){
for(int j=0;j<100;j++){
cout<<a[i][j];
}
cout<<endl;
}
以上代码运行结果如图1所示:

无 “ a[i][strlen(a[i])]=‘0’; ” 这一句。则运行结果如图2所示:(即在memset初始化的情况下,输入a【i】后,a【i】末尾的下一个位置是为空的)

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
return 0;
}
所以当我们想对数组赋值时,使用fill 函数还是比较方便的
博客介绍了memset和fill两个函数。memset函数可将指定内存前n个字节内容设为指定ASCII值,常用于新申请内存初始化,但对int数组初始化有限制;fill函数用于填充数组,通过指定数组范围和元素值,方便对数组赋值。
652

被折叠的 条评论
为什么被折叠?



