所谓数组,就是一个集合,里面存放了相同类型的数据元素。数组是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。
一维数组
一维数组定义
声明数组,需要指定元素的类型和元素的数量。一维数组定义方式:
- 类型 数组名称 [ 数组大小 ];
- 数据类型 数组名[ 数组长度 ] = { 值1,值2 …};
- 数据类型 数组名[ ] = { 值1,值2 …};
其中数组大小必要是一个大于0的整型常量,类型就是C++数据类型,代表数组中可以存放的数据类型。
一维数组使用
一位数组数组名称的应用:
- 可以统计整个数组在内存中的长度
- 可以获取数组在内存中的首地址
多维数组
二维数组属于多维数组的一种,一维数组如果说是一行数据的话,那么二维数组就是一张表格。
二维数组的定义
定义二维数组:
- 数据类型 数组名[ 行数 ][ 列数 ];
- 数据类型 数组名[ 行数 ][ 列数 ] = { {数据1,数据2 } ,{数据3,数据4 } };
- 数据类型 数组名[ 行数 ][ 列数 ] = { 数据1,数据2,数据3,数据4};
- 数据类型 数组名[ ][ 列数 ] = { 数据1,数据2,数据3,数据4};
C ++ 指向数组的指针
C++ 中,数组名是指向数组中第一个元素的常量指针。因此,在声明中:
double runoobArray[50];
runoobArray 是一个指向 runoobArray[0] 的指针,即表示为 runoobArray的第一个元素的地址。
当p赋值为runoobArray的第一个元素的地址:
double *p;
double runoobArray[10];
p = runoobArray;
使用数组名作为常量指针是合法的,当用 runoobArray 第一个元素的地址赋予 p 之后,想访问 runoobArray[4] 的时候,用*p(p+4)即可。
C++ 中函数传数组参数
C++ 中传数组给函数的时候,默认传递过去的是数组的首地址。传递一维数组给函数,需要以下的方式:
第一种是形式参数为指针:
void myFunction(int *param){
//函数体
}
第二种是形式参数是一个已经定义大小的数组:
void myFunction(int param[10]){
//函数体
}
第三种形式参数是一个未定义大小的数组:
void myFunction(int param[]){
//函数体
}
计算平均数
double getAve(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;
}
double getAve(int arr[], int size);
int main()
{
int balance[5] = {100,
2,
3,
17,
50};
double avg;
avg = getAve(balance, 5);
cout << avg << endl;
}
函数的返回值为数组
虽然 C++ 中不允许返回一个完整的数组作为函数的参数。但是,可以通过指定不带索引的数组名称来返回一个指向数组的指针。
从函数返回一个一维数组,进行声明:
int *myFunction(){
// 函数体
}
C++ 函数不支持在函数外返回局部变量的地址,除非定义为static变量。
int *getRandom()//要生成和返回随机数的函数
{ //定义一个指针变量类型的返回值
static int r[10]; //C++ 中不支持局部变量做返回值
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 = getRandom();
for (int i = 0; i < 10; i++)
{
cout << "*(p+" << i << "):";
cout << *(p + i) << endl;
}
return 0;
}