C++ 数组作为参数、返回值

数组作为参数

一维数组作为参数

1、传入数组int[]

  为了规范常常需要将数组的size一同传入,因为数组作为参数时数组在函数内退化为数组的首地址:int sum(int array[], int size)

2、传入数组首地址int *,与上面一种没有本质的区别:int sum(int * array, int size)

#include <iostream>
using namespace std;

int getAverage(int arr[], int size) {  //传入指针的写法:int getAverage(int * arr, int size)
    int sum = 0;
    int avg = 0;
    
    for (int i = 0; i < size; i++) {
        sum += arr[i];
    }

    avg = sum / size;

    return avg;
}

int main() {
    int balance[5] = { 1000, 2, 3, 17, 50 };
    int avg;

    avg = getAverage(balance, 5);  //传入指针时的实现也是这样,因为balance本身就是数组的首地址

    cout << "平均值是:" << avg << endl;

    return 0;
}

二维数组作为参数

  与一维数组一样,但区别在于必须写出列数。数组在调用时存在降价的问题,实际函数得到的是一个指针,指向行向量构成的一维数组,这样每一个一维数组的size必须提前定义好,便于分配空间。

  • int sum(int arr[][4], int size)
  • int sum(int (*arr)[4], int size)
  • int sum(int **arr, int n, int m)  //使用二维指针,n、m分别代表行数、列数
//二维数组的使用方法一:因为每一行都是单独new的,坏处是导致数组空间不连续
    int sum(int** arr, int n, int m);

    int** arr = new int* [n];
    for (int i = 0; i < n; i++) {
        arr[i] = new int[m];
    }
    for (int i = 0; i < n; i++) {
        delete[] arr[i];
    }
    delete[] arr;

//二维数组使用方法二:内存空间连续
int sum(int** arr, int n, int m); int** arr = new int* [n]; arr[0] = new int[n * m]; delete []arr[0]; delete []arr;

  一般情况下前两种够用,但如果列大小未知,可以通过手动new、delete空间使用后面两种方式

函数返回数组

  在C++中,数组不是一种类型,因此不能被直接返回,一般有两种方法来返回数组。

1、返回一个指向数组的指针

#include <iostream>
using namespace std;

int* getSum(int * arr0, int * arr1, int size) {
    int *sum;
    sum = new int[size];
    
    for (int i = 0; i < size; i++) {
        sum[i] = arr0[i] + arr1[i];
    }

    return sum;
}

int main() {
    int A[5] = { 1000, 2, 3, 17, 50 };
    int B[5] = { 100,200,300,400,500 };
    int *sum;
    sum = getSum(A, B, 5);

    return 0;
}

2、返回一个结构形式。这种形式相对较安全,可以避免忘记释放指针而造成内存泄漏,也可以避免访问指针造成的错误。缺点是由于结构是先拷贝再返回,因此如果结构较大时,会影响效率和占用较大内存。

#include <iostream>
using namespace std;

class tag
{
public:
    int a[10];
}X;

class tag Array()
{
    for (int i = 0; i < 10; i++) {
        X.a[i] = i + 1;
    }
    return X;
}

int main() {
    class tag Y = Array();
    for (int i = 0; i < 10; i++) {
        cout << Y.a[i] << " ";
    }
    cout << endl;

    return 0;
}

 

posted @ 2022-09-02 11:06  夏蝉沐雪  阅读(1475)  评论(0编辑  收藏  举报