数组
数组定义与初始化
数组名是一个常量,它代表着数组元素在内存中的起始地址。数组可以是一维数组也可以是N维数组,最常用的是一维数组和二维数组
数据类型 数组名 [常量表达式 1 ] [常量表达式 2 ] ......[常量表达式 N ];
数组的容量在定义时就必须固定,C++不存在动态定义大小的数组,例如下面这种就是错误的
int num;
cin >> num >> endl;
int a [num];
数组的初始化和定义与C没有太大差别
二维数组定义如下
float array [2] [3] ; //定义一个2X3的浮点型数组
初始化与一维数组相同
float array [2] [3] = { 1,2,3,4,5,6 };
还可以采取分行赋值的方式
float array [2] [3] = { { 1,2,3 } , { 4,5,6 } };
对于数组容量较大的情况,可以选择其中部分元素进行赋值
float array [2] [3] = { { 1 } , { 4 } };
也可以跳过某行对其他行赋值
float array [2] [3] = { { } , { 4 } };
也可以省略一维的赋值
float array [ ] [3] = { 1,2,3,4,5,6 };
数组与指针
引用数组中的元素可以使用下标,还有一种更经济高效的做法就是使用指针
int a [10] = { 1,2,3,4,5,6,7,8,9 };
int * p = a;
* p++、*(p++)与 *(++p) 的比较
#include<iostream>
using namespace std;
int mian (int argc, char* argv [ ] ) {
int a [10] = { 0,1,2,3,4,5,6,7,8,9 };
int * p;
p = &a [0];
cout << * (p++) << endl;
p = &a [0];
cout << * p++ << endl;
p = &a [0];
cout << * (++p) << endl;
return 0;
}
结果如下:
0
0
1
Press any key to continue_
如果 p 当前指向数组 a 中的第i个元素,那么将有如下结论:
1,* (- -p) 与 a[ - -i ] 的作用相同,p 先自减,再做 * 运算
2,* (p- -) 与 a[ i- - ] 的作用相同,先进行 * p 运算,p 再自减
3,* (++p) 与 a[ ++i ] 的作用相同,p 先自加,再做 * 运算