1.摘要
数组是一种复合的类型,因此在定义数组时必须显式指定数组的类型,不能使用auto关键字,静态数组的声明形如a[d]; a是数组的名字,d是数组的维度。维度说明了数组中元素的个数,因此d必须大于0。
在进行编译时,d必须是已知的,即编译器在编译时d已经是可以确定的值,因此数组的维度必须是一个常量表达式。
所谓静态,只不过是为了区别于动态数组,并非声明时要加上static。
2.初始化
int S = 10;
int arr[S]; //错误,S不是常量表达式
int *prr[10]; //正确,10是常量表达式
const int M = 10;
int A[M] = { 10 }; //正确,M是常量表达式
string C = "fishing_pan";
const int N = C.length();
char B[N]; //错误,N不是常量表达式,因为N在运行时候才被初始化
字符数组可以不声明大小。
char arr4[3] ="pan"; //错误,"pan"是const char[4]类型,不能用于初始化char arr4[3]
char arr5[] ="pan"; //正确,arr5大小为4;
不能将数组内容拷贝给其他数组进行初始化,也不能用数组为其他数组赋值。
3.访问
1下标访问
char arr5[] = "pan";
char c=arr[2]; //c=’n’;
2.指针访问
int arr1[4] = { 0, 1, 2 };
int *p = &arr1[1]; //指向arr1的第二个数;
3.遍历
int *beg = begin(arr1); //指向数组首元素
int *ends = end(arr1); //指向数组末尾元素的下一位
while(beg!=ends) //进行遍历。
{
cout<< *beg<<endl; //解引用输出数组值。
beg++;
}
4.多维动态数组
int twodArr2[4][5] = { { 0, 1, 2, 3, 4 }, {5, 6, 7, 8, 9 }, { 0, 1, 2, 3, 4 }, { 5, 6, 7, 8, 9 } };
for (auto p = begin(twodArr2); p !=end(twodArr2); p++)
{
for(auto q = begin(*p); q != end(*p); q++)
{
cout<< *q << " ";
}
cout<< endl;
}
多维动态数组中的指针:
两种方式:
int(*p3)[5]= twodArr2; //指向twodArr2的第一行
p3= &twodArr2[1]; //指向twodArr2的第二行