二维数组的参数传递

参考链接
https://www.cnblogs.com/cygalaxy/p/6963789.html
https://www.cnblogs.com/LeeZz/p/5084498.html

问题

在C++语言中实际上没有真正的多维数组,所谓的多维数组实际上是数组的数组。
和所有数组一样,当将多维数组传递给函数时,真正传递给函数的是指向数组首元素的指针。因为我们处理的是数组的数组,所以首元素本身就是一个数组,指针就是一个指向数组的指针。将二维数组作为参数进行传递时,必须指明所有维数大小或者省略第一维的,但是不能省略第二维或者更高维的大小

以下几种是正常的传递方式:

void fun1(int arr[10][10]);
void fun2(int arr[][10]);

但是下面这种传递方式是错误的:

void fun3(int [][]);    //必须指明第二维的大小

当我们需要使用第三种传递方式时,应该怎么做呢?

解决方案

给出示例:

#include <iostream>
#include <stdlib.h>

using namespace std;

void fun(int *A, int M, int N)
{
    for (int i=0; i<M; i++)
    {
        for (int j = 0; j<N; j++)
        {
            *(A+i*N+j) = i*N+j+2;   //根据编译器寻址方式对数组元素操作
        }
    }
}

int main()
{
    int M = 2;      //行数
    int N = 2;      //列数
    int A[M][N] = {0};
    for (int i=0; i<M; i++)
    {
        for (int j = 0; j<N; j++)
        {
            A[i][j] = i*N+j+1;
        }
    }

    cout << "before : " << endl;
    for (int i=0; i<M; i++)
    {
        for (int j=0; j<N; j++)
        {
            printf("%d ", A[i][j]);
        }
        cout << endl;
    }
    cout << endl;

    fun((int *)A, M, N);

    cout << "after : " << endl;
    for (int i=0; i<M; i++)
    {
        for (int j=0; j<N; j++)
        {
            printf("%d ", A[i][j]);
        }
        cout << endl;
    }
    cout << endl;
}

最后的结果为:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/yang_half/article/details/81538999