C++ 数组


所谓数组,就是一个集合,里面存放了相同类型的数据元素。数组是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。

一维数组

一维数组定义

声明数组,需要指定元素的类型和元素的数量。一维数组定义方式:

  • 类型 数组名称 [ 数组大小 ];
  • 数据类型 数组名[ 数组长度 ] = { 值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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值