一、数组存储一个固定大小的相同类型元素的顺序集合。和vector相比,数组有以下几个特点:
1、数组大小确定不变,不能随意向数组中增加元素,但是损失了灵活性;
2、不能随意增加元素,则运行性能较好。
数组声明不是一个个单独变量声明,而是声明一个数组变量,特定元素通过索引来实现。并且所有的数组都是由连续的内存位置组成,最低的地址对应第一个元素,最高的地址对应最后一个元素。
数组元素是通过索引来访问。
std::setw()函数用来格式话输出。其中setw(13)表示紧随其后的值的字段宽度。
二、多维数组
type arrayName[x][y]其中x表示行,y表示列
三、指向数组的指针
使用数组名作为常量指针是合法的,反之*(n+4)是访问n[i]数据的合法方式
int main()
{
double ba[5] = { 1000.0,2.0,3.4,17.0,50.0 };
double* p;
p = ba;
cout << "使用指针的数组值 " << endl;
for (int i = 0; i < 5; i++)
{
cout << "*(p + " << i << ") : " << *(p + i) << endl;
cout << "(p + " << i << ") : " << (p + i) << endl;
}
cout << "使用ba作为地址的数组值 " << endl;
for (int i = 0; i < 5; i++)
{
cout << "*(ba + " << i << ") : " << *(ba + i) << endl;
cout << "(ba + " << i << ") : " << (ba + i) << endl;
}
system("pause");
return 0;
}
使用指针和使用数组的数值和地址是一样的,运行的结果为

四、传递数组给函数
通过指定不带索引的数组名来传递指向数组的指针。(这句话好好品品)
将数组传给函数,数组类型自动转换成指针类型,因而传的实际是地址。
如果想在函数中传递一个一维数组作为参数,必须以下面三种方式来声明函数形式参数,三种方式是等价的,每种方式都会告诉编译器将要接收一个整型指针,同样也可以传递一个多维数组作为形式参数。
方式一
形式参数是一个指针:
void myFunction(int *param)
{}
方式二
形式参数是一个已定义大小的数组:
void myFunction(int param[10])
{}
方式三
形式参数是一个未定义大小的数组:
void myFunction(int param[])
{}
好好理解这段代码:
double getAverage(int arr[], int size);
int main()
{
int balance[5] = { 1000,2,3,17,50 };
double avg;
// avg = getAverage(&balance[0], 5);
avg = getAverage(balance, 5);
cout << "avg = " << avg << endl;
system("pause");
return 0;
}
//double getAverage(int arr[], int size)
//double getAverage(int arr[10], int size)
double getAverage(int *arr, int size)
{
int i, sum = 0;
double avg;
for (i = 0; i < size; i++)
{
sum += arr[i];
}
avg = double(sum) / size;
return avg;
}
五、从函数返回数组
可以通过指定不带索引的数组名来返回一个指向数组的指针,另外C++ 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量:
int* getRandom1()
{
static int r[10];
srand((unsigned)time(NULL));
for (int i = 0; i < 10; i++)
{
r[i] = rand();
cout << r[i] << endl;
}
return r;
}
int main()
{
int* p;
p = getRandom1();
for (int i = 0; i < 10; i++)
{
cout << "*(p+" << i << ") : " << *(p + i) << endl;
}
system("pause");
return 0;
}
5645

被折叠的 条评论
为什么被折叠?



