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

一般我们在使用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 函数还是比较方便的

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值