C/C++之数组元素全清零实现


总结

  • 全局变量数组未初始化,则其默认值全为0.
  • 局部变量数组未初始化,则其默认值随机,需要手动清零。
  • 数组初始化为空最简单。

PS:关于所用函数的解析


一、全局变量数组

#include <stdio.h>
int a[100];
int main()
{
	printf("%d ", a[0]);
	//0
	return 0;
}

自动为0,所以直接使用就ok。

二、局部变量数组

1.垃圾值

#include <stdio.h>
int main()
{
	int a[100];
	printf("%d ", a[0]);
	//-858993460
	return 0;
}

2.最简单:初始化为空

简单到哭了QAQ

int a[5] = {};

字符数组都行:

char buff[1000] = {};
char buff[1000] = "";

3.memset()

(1)头文件

C:#include<string.h>

C++:#include<cstring> or #include<string.h>

(2)函数原型

void *memset(void *s,int c,size_t n)

作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。

参数:s代表数组名,c代表要设置的值,n代表内存空间。

注意:第三个参数表示内存空间,而不是元素个数,内存空间=元素个数*每个元素所占空间。

int a[5];
memset(a,0,sizeof(a));
for(int i=0;i<5;i++)
	cout<<a[i]<<' ';
//0 0 0 0 0

(3)局限

一般来说用0或-1初始化,别的值会发生意想不到的错误

int a[5];
memset(a,1,sizeof(a));
for(int i=0;i<5;i++)
	cout<<a[i]<<' ';
//16843009 16843009 16843009 16843009 16843009
第二个参数c的值的范围是0x00-0xff

意义:如memset(s,1,n),c就是0x01,c是int型,四个字节(0x01010101),转化成十进制就是1643009

int a[5];
cout<<0x02<<' '<<0x02020202<<endl;
memset(a,2,sizeof(a));
for(int i=0;i<5;i++)
	cout<<a[i]<<' ';
//33686018 33686018 33686018 33686018 33686018
int a[5];
memset(a,0xff,sizeof(a));
for(int i=0;i<5;i++)
	cout<<a[i]<<' ';
//-1 -1 -1 -1 -1
//0xffffffff就是-1

4.fill()

(1)头文件

#include <iostream>
using namespace std;

(2)例子

int a[10];
fill(a,a+10,0);

参考:

memset真的要慎用!!!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值