添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

一维数组作为参数

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