Skip to main content

数组

数组

c数组允许定义可存储相同类型数据项的变量,而javascript中的数组则可以保存任意类型的变量。

如果有不同数据类型的,可以定义一个struct,其中包含了你想要的数据类型,然后定义struct数组就行了。

声明数组

数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 numbers[0]、numbers[1]、...、numbers[99] 来代表一个个单独的变量。数组中的特定元素可以通过索引访问。

所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。

声明一个数组,需要指定元素的类型和元素的数量,这叫做一维数组。arraySize 必须是一个大于零的整数常量,type 可以是任意有效的 c 数据类型。

// 语法
type arrayName [ arraySize ];
// 例子
double balance[10];

初始化数组

可以逐个初始化数组,也可以使用一个初始化语句,如下所示:

double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};

如果您省略掉了数组的大小,数组的大小则为初始化时元素的个数。因此,如果:

double balance[] = {1000.0, 2.0, 3.4, 7.0, 50.0};
// 访问数组元素
double salary = balance[9];
#include <iostream>
using namespace std;

#include <iomanip>
using std::setw;

int main ()
{
int n[ 10 ]; // n 是一个包含 10 个整数的数组

// 初始化数组元素
for ( int i = 0; i < 10; i++ )
{
n[ i ] = i + 100; // 设置元素 i 为 i + 100
}
cout << "Element" << setw( 13 ) << "Value" << endl;

// 输出数组中每个元素的值
for ( int j = 0; j < 10; j++ )
{
cout << setw( 7 )<< j << setw( 13 ) << n[ j ] << endl;
}

return 0;
}
/*
Element Value
0 100
1 101
2 102
3 103
4 104
5 105
6 106
7 107
8 108
9 109
*/

指向数组的指针

p 是一个指向 double 型的指针,这意味着它可以存储一个 double 类型的变量。一旦我们有了 p 中的地址,*p 将给出存储在 p 中相应地址的值

#include <iostream>
using namespace std;

int main ()
{
// 带有 5 个元素的双精度浮点型数组
double runoobAarray[5] = {1000.0, 2.0, 3.4, 17.0, 50.0};
double *p;

p = runoobAarray;

// 输出数组中每个元素的值
cout << "使用指针的数组值 " << endl;
for ( int i = 0; i < 5; i++ )
{
cout << "*(p + " << i << ") : ";
cout << *(p + i) << endl;
}

cout << "使用 runoobAarray 作为地址的数组值 " << endl;
for ( int i = 0; i < 5; i++ )
{
cout << "*(runoobAarray + " << i << ") : ";
cout << *(runoobAarray + i) << endl;
}

return 0;
}
/*
使用指针的数组值
*(p + 0) : 1000
*(p + 1) : 2
*(p + 2) : 3.4
*(p + 3) : 17
*(p + 4) : 50

使用 runoobAarray 作为地址的数组值
*(runoobAarray + 0) : 1000
*(runoobAarray + 1) : 2
*(runoobAarray + 2) : 3.4
*(runoobAarray + 3) : 17
*(runoobAarray + 4) : 50
*/

传递数组给函数

c 传数组给一个函数,数组类型自动转换为指针类型,因而传的实际是地址。

// 方式 1:形式参数是一个指针:
void myFunction(int *param)
{ }

// 方式 2 形式参数是一个已定义大小的数组:
void myFunction(int param[10])
{ }

// 方式 3 形式参数是一个未定义大小的数组
void myFunction(int param[])
{ }
#include <iostream>
using namespace std;

// 函数声明
double getAverage(int arr[], int size);

int main ()
{
// 带有 5 个元素的整型数组
int balance[5] = {1000, 2, 3, 17, 50};
double avg;

// 传递一个指向数组的指针作为参数
avg = getAverage( balance, 5 ) ;

// 输出返回值
cout << "平均值是:" << avg << endl;

return 0;
}

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;
}

/*
平均值是: 214.4
*/