数组的基础知识就不重复了,只挑了一些重点。
1、数组的声明及初始化
int array1[5];//声明

int array2[5] = ......{ 1, 2 , 3 , 4 , 5};//声明并初始化

int array3[5] = ......{ 1};//如果初始化的值少于元素数量,那么剩余的元素将被隐式的初始化为0

int array4[] = ......{ 1 , 2 , 3 , 4 , 5};//自动创建一个含有5个元素的数组,并且已经初始化为1,2 ,3,4,5
2、字符数组
声明一个字符数组时,我们可以直接的用一个字符串来初始化,例如
char str[] = "string";
要注意的是,此时str的长度是7而不是6,str[6]存储的是一个表示字符串结束的字符,即NULL字符,用常量表示就是'/0',反斜杠后面加一个数字0,以上声明也等价于

char str[] = ...{'s', 't', 'r', 'i', 'n', 'g', '/0'};
特别的,当我们用数组来储存用户输入时,及其容易发生数组溢出情况,因为你不知道用户将要输入多少字符
char str2[10];
cin >> str2;
此时程序将把用户的输入存储在str2中,并自动的在后面加上一个NULL,问题是程序不管用户到底输入了多少,我们只给出了数组的头元素地址,那么程序将从该地址开始,一直往下储存,而不管有没有到达数组的边界,这样的话极其容易造成数据丢失(因为用户输入的东西可能把有用的数据覆盖掉了),解决的办法就是使用setw流操作符
char str3[10];
cin >> setw(10) >> str3;
这样就指定了最多取用户的前9个字符,并且在末尾加上一个NULL字符。
类似的cout函数也有此情况,它将从初始地址一直打印内存中的字符,直到遇到一个NULL字符,我们可以采取类似cin的办法来处理问题。
3、static 数组
当我们需要在一个函数里保存局部数组的信息时,我们可以将其声明为static,这样当函数退出时,数组的信息将不会被删除
#include <iostream>

using std::cout;
using std::endl;

void staticArray(void);
void autoArray(void);

int main()

...{
cout << "First call to each function:"<< endl;
staticArray();
autoArray();

cout <<" Second call to each function:"<< endl;
staticArray();
autoArray();

cout<<endl;
return 1;
}
void staticArray()

...{
static int array1[3];
int i;

cout << " Values on entering staticArray: ";
for(i = 0; i < 3; i++)
cout << "array1[" << i << "] = " <<array1[i] << " ";

cout << " Values on exiting staticArray: ";
for(i = 0; i < 3; i++)
cout << "array1[" << i << "] = " <<(array1[i] += 5) << " ";
}
void autoArray()

...{

int array2[3] = ...{1, 2, 3};
int i;

cout << " Values on entering autoArray: ";
for(i = 0; i < 3; i++)
cout << "array2[" << i << "] = " <<array2[i] << " ";

cout << " Values on exiting autoArray: ";
for(i = 0; i < 3; i++)
cout << "array2[" << i << "] = " <<(array2[i] += 5) << " ";
}

/**//*输出结果
First call to each function

Values on entering staticArray
array1[0] = 0 array1[1] = 0 array1[2] = 0
Values on exiting staticArray
array1[0] = 5 array1[1] = 5 array1[2] = 5

Values on entering autoArray
array2[0] = 1 array2[1] = 2 array2[2] = 3
Values on exiting autoArray
array2[0] = 6 array2[1] = 7 array2[2] = 8

Second call to each function

Values on entering staticArray
array1[0] = 5 array1[1] = 5 array1[2] = 5
Values on exiting staticArray
array1[0] = 10 array1[1] = 10 array1[2] = 10

Values on entering autoArray
array2[0] = 1 array2[1] = 2 array2[2] = 3
Values on exiting autoArray
array2[0] = 6 array2[1] = 7 array2[2] = 8
*/

可见,声明为static的数组是在程序载入时初始化的,并且以后不再自动初始化。
4、传递数组给函数
c++通过模拟“按引用调用”将数组传递给函数。数组名的值就是数组第一个元素的地址。因为c++不像java那样可以知道数组的大小,所以传递数组时通常要顺带传递一个数组长度。
void modifyArray(int a[], int sz)

...{
int i;
for(i = 0;i < sz;i++)
a[i] *= 2;
}
void modifyElement(int i)

...{
i *= 2;
}

int main()

...{
const int size =3;

int array[size]= ...{1,2,3};
printArray(array);

modifyArray(array,size);
printArray(array);

modifyElement(array[1]);
printArray(array);
return 1;
}

/**//*输出结果
1 2 3
2 4 6
2 4 6
*/
如果不希望函数修改数组的内容,那么可以想我们在“函数”里面一样使用const限定符。
5、多维数组
多位数组跟一维数组有着类似的性质,重要的不同的地方是在析构函数时多维数组的删除问题,这再以后再讨论,下面仅仅讨论一下多维数组的初始化问题。
int main()

...{

int array1[2][3] = ...{ ...{1,2,3}, ...{4,5,6}},

array2[2][3] = ...{ 1,2,3,4},

array3[2][3] = ...{ ...{1,2},...{4}};
printArray(array1);
printArray(array2);
printArray(array3);
return 1;
}

/**//*输出结果
1 2 3
4 5 6

1 2 3
4 0 0

1 2 0
4 0 0
*/
相信例子中已经很明显了。
——总结自《c++编程金典》