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

博客介绍了memset和fill两个函数。memset函数可将指定内存前n个字节内容设为指定ASCII值,常用于新申请内存初始化,但对int数组初始化有限制;fill函数用于填充数组,通过指定数组范围和元素值,方便对数组赋值。

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 函数还是比较方便的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值