码迷,mamicode.com
首页 > 编程语言 > 详细

C++中二维数组传参的方法详解

时间:2020-01-21 23:08:52      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:转换   等价   它的   使用   二级指针   元素   using   cout   put   

C++中二维数组传参的方法详解
首先需要明确,C++中其实没有多维数组,所谓的多维数组,其实就是数组的数组;
另外,数组中元素的个数也是数组类型的一部分。
当一个数组的元素仍然是数组时,通常使用2个维度来定义它,一个数组表示数组本身的大小,另一个维度表示其元素大小(它的元素也是数组):

int ia[3][4]; //大小为3的数组,每个元素是含有4个整数的数组
int (*p)[4] = ia;//p指向含有4个整数的数组(指向第一个内层数组)

1 将给定第二维长度的二维数组作为形参传递

#include<iostream>
using namespace std;

void outputArray1(int ia[][4])
{
    for (int i = 0; i != 3; ++i)
    {
        for (int j = 0; j != 4; ++j)
        {
            cout << ia[i][j] << endl;
        }
    }
}

int main()
{
    int ia[3][4] = {
    {1, 2, 8, 9 },
    {2, 4, 9, 12},
    {4, 7, 10, 13}
    };
    //输出数组中所有元素
    outputArray1(ia);
    return 0;
}

2 使用给定第二维长度的指针作为形参传递

#include<iostream>
using namespace std;

void outputArray2(int (*pia)[4])
{
    for (int i = 0; i != 3; ++i)
    {
        for (int j = 0; j != 4; ++j)
        {
            cout << pia[i][j] << endl;
        }
    }
}

int main()
{
    int ia[3][4] = {
    {1, 2, 8, 9 },
    {2, 4, 9, 12},
    {4, 7, 10, 13}
    };
    //输出数组中所有元素
    outputArray2(ia);
    return 0;
}

3 将二维数组指针转换成一维数组指针作为形参传递

int (*ia)[4]转换为 int* ia

#include<iostream>
using namespace std;

void outputArray3(int *pia2)
{
    for (int i = 0; i != 12; ++i)
    {        
        cout << pia2[i] << endl;
        //等价于cout<< *(pia2 + i) << endl;       
    }
   /* 另一种写法
   for (int i = 0; i != 3; ++i)
    {
        for (int j = 0; j != 4; ++j)
        {         
            cout << *(pia2 + i * 4 + j) << endl;
            //等价于cout << pia2[ i * 4 + j] << endl;
        }
    }*/
}

int main()
{
    int ia[3][4] = {
    {1, 2, 8, 9 },
    {2, 4, 9, 12},
    {4, 7, 10, 13}
    };
    //输出数组中所有元素
    outputArray3((int*)ia);
    return 0;
}

4 使用二级指针作为形参传递

#include<iostream>
using namespace std;

void outputArray4(int **pia3)
{

    for (int i = 0; i != 3; ++i)
    {
        for (int j = 0; j != 4; ++j)
        {
            cout << *((int*)pia3 + i * 4 + j) << endl;//解引用指针
        }
    }
}

int main()
{
    int ia[3][4] = {
    {1, 2, 8, 9 },
    {2, 4, 9, 12},
    {4, 7, 10, 13}
    };

    //输出数组中所有元素
    outputArray4((int **)ia);//强制转换为int**
    return 0;
}

Tips:对于2维数组ia来说,ia[1]指向第二行的第一个位置,*ia[1]等于2,一级指针指向每行(子数组)的第一个元素,用二级指针才能定位到任意单个元素。在实际使用中尽量避免使用强制转换和多级指针。

C++中二维数组传参的方法详解

标签:转换   等价   它的   使用   二级指针   元素   using   cout   put   

原文地址:https://www.cnblogs.com/alexandergan/p/12225814.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!