当前位置:   article > 正文

C++数组初始化 memset()&fill()_int a[100]={2}

int a[100]={2}

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

静态赋值

  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...}
  • 1
  • 2

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

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

动态分配

动态分配内存空间初始化
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
  • 2
  • 3
  • 4

在这里插入图片描述

  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
  • 2

使用函数初始化数组

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

在使用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] <<" ";
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/44402
推荐阅读
相关标签
  

闽ICP备14008679号