C++数组初始化 memset()&fill()

数组初始化是初学者遇到的问题之一。
有以下几种形式:

静态赋值

  1. 在全局变量中定义 int a[100];会自动初始化为全0数列
  2. 局部变量中如上例定义会出现赋值错乱。
    只能使用{} int a[100] = {1,2,3};
    或者int a[100] = {};构造全零列。{}中也可以加入0构造全零列。
    或:
int a[100] = {9};
//output:{9,0,0,0,0,0...}

注意⚠️
数组初始化中{}只能用于数组最初声明时,不能用于声明之后再次赋值。

int a[100];
a = {1,2,3,4};//错误,{}只可用于声明
  1. 变量作为数组参数
const int n;
cin >> n;
int a[n]={0}; // 注意n必须为const类型,否则错误

动态分配

动态分配内存空间初始化
int * a = new int [10];
使用这种方法声明之后,只能使用以下方式初始化

  1. 数组相等直接复制
int b[10] = {1,2,3};
    a = b;
    for(int i = 0; i < 10; i++)
        cout << a[i] << " ";

在这里插入图片描述

  1. for()循环赋值,就不展开了
  2. memset()函数,后文介绍
  3. 或者使用语句int * a = new int [10] ()括号中不能放入任何常数,初始化为全零列
int* a = new int[10]();
//output:0 0 0 0 0 0 0 0 0 0 

使用函数初始化数组

  1. memset()函数()需要include 头文件
memset(a,-1,sizeof(a));
//or  memset(a,0,sizeof(a));

在使用memset()初始化时,只能将数组全部赋0或-1值,其他值都会报错。
csdn一篇博文中博主memset(a,5,sizeof(a));竟然正常运行并且将数组全部赋值为5,不知是什么IDE。
不过在我的电脑上,运行错误。
在这里插入图片描述
输出
在这里插入图片描述

  1. fill()函数 (需要include. 头文件)
#include <iostream>
#include<algorithm>
using namespace std;

int main()
{
    int a[10];
    fill(a,a+10,9);

    for(int i = 0;i < 10;i++)
    {
        cout << a[i] <<" ";
    }

}

在这里插入图片描述
fill()函数弥补了memset() 的缺憾,能够对数组全部任意赋值。相比较而言,memset()函数的优势在于运行速度快一些。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值