数组
如果每个数据,都需要一个新的变量才能保存的话,那么100个数据,就需要定义100个变量了。这显然不是我们希望的事情。因此,可以把单一的数据类型集合组在一起,也就是数组。
数组中可以保存多个数据,通过数据在数组中的位置来访问数据,也就是通过索引(下标)来进行访问。
定义一个数组
// 定义一个10个元素的数组
int arr[10];
按照规定来说,c++14以前,定义数组在指定元素个数的时候,必须使用一个常量表达式,非const变量不能用来定义数组。
const int a = 10;
int b = 10;
// a是一个const变量,可以
int arr1[a];
// b不是const变量,不可以
int arr2[b];
规定上应该是这样,但是真的使用的时候,会发现有些编译器确实可以不用常量表达式,也能正常定义和使用数组(这种实际情况和语法规则不符的事情,在c++中是常有发生的)。
定义数组的同时赋初值
#include <iostream>
using namespace std;
int main()
{
// 使用花括号的形式,为数组赋初值
int arr[3] = {1,2,3};
// 如同代码中所看到的这样,数组是从0开始计数的
// 也即第一个元素的下标为0
cout << arr[0] << endl;
cout << arr[1] << endl;
cout << arr[2] << endl;
// 在定义的时候如果就进行初始化,那么也可以不指定个数
int arr2[] = {1,2,3}
}
注意:数组不可以用其他数组直接赋值,必须要按照顺序,把要拷贝的数组中的每一个元素都拷贝过去。
#include <iostream>
using namespace std;
int main()
{
int arr1[3] = {1,2,3};
// 这种赋值方式是不可以的
// int arr2[3] = arr1;
// 正确的赋值要像这样
int arr2[3];
arr2[0] = arr1[0];
arr2[1] = arr1[1];
arr2[2] = arr1[2];
cout << arr2[0] << endl;
}
多维数组
通过多个方括号,可以指定一个多维数组,常见的二维数组类似于使用excel或者csv文件,可以通过行,列来对应到数据。
二维数组的定义
#include <iostream>
using namespace std;
int main()
{
// 定义二维数组需要两个方括号
// a[2][3]也可以理解为2行,3列
int a[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
// 使用的时候也需要两个方括号
cout << a[0][0] << endl;
cout << a[0][1] << endl;
cout << a[0][2] << endl;
cout << a[1][0] << endl;
cout << a[1][1] << endl;
cout << a[1][2] << endl;
}
数组和指针的关系
一个数组,保存的就是这个数组的首个元素的地址,等同于指向首个元素的指针。
#include <iostream>
using namespace std;
int main()
{
int a[3] = {1, 2, 4};
int * p1 = a;
int * p2 = &a[0];
// 这样定义是不对的,因为&a不是int*类型
// int * p3 = &a;
cout << *p1 << endl;
cout << *p2 << endl;
// 我们可以观察到,使用数组名和取数组首元素的地址
// 其使用效果上是一样的
cout << *(p1 + 1) << endl;
cout << *(p2 + 1) << endl;
}
因此,我们可以使用数组名,就像使用指针那样。
#include <iostream>
using namespace std;
int main()
{
int a[3] = {1, 2, 4};
cout << *a << endl;
// 使用a + 1,我们可以取得数组中下一个元素的地址
cout << *(a + 1) << endl;
// 注意,由于运算符优先级的影响
// *(a + 2)和*a + 2是不一样的
// *(a + 2)的结果是4,*a + 2的结果为3
cout << *a + 2 << endl;
}
数组和指针的区别
虽然数组名本身是一个指向数组首元素的指针,但是数组名本身不可以使用自增自减
#include <iostream>
using namespace std;
int main()
{
const int size = 4;
int arr[size] = {1, 2, 3, 4};
int *p = arr;
for (int i=0; i<size; ++i, ++p)
cout << *p << endl;
// 将指针换成数组名以后,该程序不正确
// 因为数组不能使用自增
// for (int i=0; i<size; ++i, ++arr)
// cout << *arr << endl;
// 只能通过这种方式,达到类似的效果
for (int i=0; i<size; ++i)
cout << *(arr + i) << endl;
}
点击查看全部c++教程