数组初始化是初学者遇到的问题之一。
有以下几种形式:
静态赋值
- 在全局变量中定义
int a[100];
会自动初始化为全0数列 - 局部变量中如上例定义会出现赋值错乱。
只能使用{}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};//错误,{}只可用于声明
- 变量作为数组参数
const int n;
cin >> n;
int a[n]={0}; // 注意n必须为const类型,否则错误
动态分配
动态分配内存空间初始化
int * a = new int [10];
使用这种方法声明之后,只能使用以下方式初始化
- 数组相等直接复制
int b[10] = {1,2,3};
a = b;
for(int i = 0; i < 10; i++)
cout << a[i] << " ";
- for()循环赋值,就不展开了
- memset()函数,后文介绍
- 或者使用语句
int * a = new int [10] ()
括号中不能放入任何常数,初始化为全零列
int* a = new int[10]();
//output:0 0 0 0 0 0 0 0 0 0
使用函数初始化数组
- memset()函数()需要include 头文件
memset(a,-1,sizeof(a));
//or memset(a,0,sizeof(a));
在使用memset()初始化时,只能将数组全部赋0或-1值,其他值都会报错。
csdn一篇博文中博主memset(a,5,sizeof(a));
竟然正常运行并且将数组全部赋值为5,不知是什么IDE。
不过在我的电脑上,运行错误。
输出
- 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()函数的优势在于运行速度快一些。