C++一维数组的初始化及可能出现的问题

  • Post author:
  • Post category:其他


一维数组的定义形式:

数据类型  数组名[常量表达式], 其中常量表达式用来表示数组的大小(数组元素个数)。在C++中数组的定义是:由


确定


数目的相同数据类型元素按照一定顺序排列的结构数据类型。所以数组的大小一定是确定的,只能用常量表达式来表示数组大小,而如果用变量来表示(初学时很可能这样干)数组大小,比如这样:

int a = 5;
int num[a];

一运行就会直接报错:

如果改写成这样就是可行的:

const int a = 5;
int num[a];

一维数组的初始化方法:

1.在数组定义的同时进行初始化赋值,用大括号按顺序列出要赋予的值,此时是对数组进行整体赋值,具体形式如下:

int num[5] = { 1,2,3,4,5 };
for (int i = 0; i < 5; i++) {
	cout << num[i] << ' ';
}

此时数组num每个元素都被赋予相应的值:

num[0] num[1] num[2] num[3] num[4]
1 2 3 4 5

实际运行情况:

数组定义时整体赋值也可以不必对所有的元素都赋值,可以只对一部分元素赋值,但这一部分元素只能是数组前一部分连续的元素,这是C++中默认的。因为计算机对数组整体赋值时是按顺序对元素一个个赋值的,如果不这么默认,比方说不给数组的第一个元素赋值,而给第二、三个元素赋值,那用户就要输入两个数(假设可以);如果只给第一、二个元素赋值,那用户也同样要输入两个数,那这样的话对于同样的两个输入(赋值目标却不同),计算机就无法知道用户提供的第一个数到底是给数组的第一个元素赋值,还是第二个元素赋值,这样就有歧义,会引发错误。

数组定义时部分元素赋值如下:

int num[5] = { 1,2,3 };
for (int i = 0; i < 5; i++) {
	cout << num[i] << ' ';
}

此时数组num每个元素的值:

num[0] num[1] num[2] num[3] num[4]
1 2 3 0 0

实际情况:

可以看到,数组中的元素如果没有初始化赋值,则C++会对其默认赋0值。

对全部元素赋值时,可以不指定数组的大小,增加了一些灵活性,具体形式如下:

int num[] = { 1,2,3,4,5 };
for (int i = 0; i < 5; i++) {
	cout << num[i] << ' ';
}

运行结果:

没有定义大小的数组被整体赋值后(5个数),数组大小就确定为5了。

2. 数组定义后按下标赋值。具体形式如下:

int num[5];
for (int i = 0; i < 5; i++) {
	num[i] = i + 1;
}

此时数组各元素的值:

num[0] num[1] num[2] num[3] num[4]
1 2 3 4 5

当然,也可以从键盘输入,按下标为数组元素赋值,形式如下:

int num[5];
for (int i = 0; i < 5; i++) {
	cin >> num[i];
}

3.利用数组名的指针性质为数组元素赋值。

一个数组名其实也是一个指向数组第一个元素的指针,由于数组各个元素的存储地址是按顺序连续的,所以可以用数组名的指针性质为数组元素赋值,具体形式如下:

int num[5];
for (int i = 0; i < 5; i++) {
	*(num + i) = i + 1;
}

此时数组各元素的值:

num[0] num[1] num[2] num[3] num[4]
1 2 3 4 5

实际运行情况:

一维数组初始化时可能出现的错误:

数组定义时没有初始化,定义后又给数组整体大括号赋值,比如:

int num[5];
num[5] = { 1,2,3,4,5 };

这样是


不可取


的,报错情况如下:

所以,不能在数组定义之后,再用大括号整体赋值。

在利用数组下标进行赋值时,也要避免数组下标越界的情况发生(虽然很少发生,但也要注意,当代码变多变复杂时,不注意就很有可能发生)。



版权声明:本文为XIETINGYUWO原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。