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

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,一级指针指向每行(子数组)的第一个元素,用二级指针才能定位到任意单个元素。在实际使用中尽量避免使用强制转换和多级指针。

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

时间: 2024-10-11 06:41:21

C++中二维数组传参的方法详解的相关文章

关于C语言中二维数组传参————————【Badboy】

直接上代码: #include void Fun(int *a[],int m,int n)// { printf("%d\t",*a);//[0][0] /* int e[2][2][2]={8,7,6,5,4,3,2,1}; int *f,***g; g=e; f=e;//有警告,但不会报错 printf("%d\n",*f); */ } /*解释: Fun()中的int *a[2]表示定义指针数组a[2],a[0],a[1]存储的都是指针, a表示的是数组的首

关于二维数组传参做形参(转)

二维数组的存储方式是和一维数组没什么区别,但是用二维数组做参数,它的形参该怎样写?要注意的是:函数中的形参其实就相当于一个声明,并不产生内存分配,形参的目的就是要让编译器知道函数参数的数据类型. 正确的是:void Func(int array[3][10]); void Func(int array[][10]);可以省略第一维的大小 错误的是void Func(int array[][].这样的用法只能在初始化时可以用);这样写也是错误:void Func(const int m,const

JavaScript中数组Array.sort()排序方法详解

JavaScript中数组的sort()方法主要用于对数组的元素进行排序.其中,sort()方法有一个可选参数.但是,此参数必须是函数. 数组在调用sort()方法时,如果没有传参将按字母顺序(字符编码顺序)对数组中的元素进行排序,如果想按照其他标准进行排序,就需要进行传一个参数且为函数,该函数要比较两个值,并且会返回一个用于说明这两个值的相对顺序的数字. 1.对数字数组进行由小到大的顺序进行排序. 代码: var arr = [22,12,3,43,56,47,4]; arr.sort();

二维数组作为函数参数深度详解

        前几天和同学讨论数组作为函数参数,感觉各种困惑.花了一些时间在网上查看了一些资料,并加上自己的理解.记录一下! 一. 指向指针的指针和指向数组的指针 很多人以为"指向数组的指针"就是"指向指针的指针",于是有人写这样的代码: int a[3][4]; int **p = a; //错误 数组实际类型是int [3][4],在作为右值时可以被转化为int (*)[4],它们都和int **不同,自然不可用. 那么,你要用一个指针来指向a,就要用一个

java 在方法中新建线程,传参和加锁详解

在实际开发中,往往在基本两三种创建线程的方法之外,还用到一个简单的创建线程调用方法的情况,代码如下: public void deleteRedisData(RedisKey redisKey){ new Thread(new Runnable() { @Override public void run() { deleteRedisByRedisKey(redisKey); } }).start(); } protected synchronized void deleteRedisByRed

php中二维数组排序问题方法详解

合肥开源IT教育分享一篇<php中二维数组排序问题方法详解>的文章希望能够帮助在学习php的新手们,如果还有什么不懂的问题 可以关注我们的官方网站:www.kyitjy.com  豪华的名师团队,多位技术专家授课,多位核心研发工程师研发授课. PHP中二维数组排序,可以使用PHP内置函数uasort() 示例一: 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联 回调函数如下:注意回调函数的返回值是负数或者是false的时候,表示回调函数的第一个参数在前,第二个参数在后排列 $per

C++中二维数组的动态分配

作者:   来源:csdn博客   公布者:admin 时间:2009-04-23 13:55:03   点击:115 C++中一维数组的动态分配十分经常使用,但C++刚開始学习的人可能非常少想过要使用动态分配的二维数组,或者自觉得二维数组就是这样分配的(至少我自己開始的时候就这样觉得):int m=2, n=3; int** array2D=new int[m][n];.这全然是我们写多了像int n=4; int* array=new int[n];这种语句留下的后遗症,纯粹是由于惯性太大刹

c/c++ 数组传参

在c/c++中,在进行数组传参时,数组的元素个数默认是不作为实参传入调用函数,也就是说c/c++ 不允许向函数传递一个完整的数组作为参数 实例: 1.形式参数是一个指针,实参包括数组长度: 1 void myFunction(int *param,int length){ 2 for (int i = 0; i<length - 1; i++) 3 { 4 cout << param[i] << "\t"<<endl; 5 } 6 } 2.形式

php 二维数组传递给 js 问题解决记录

需求: php从数据库中读取到二维数组.传递到js中 实现步骤: php:json_encode  →   json  →  js:eval 即在php中使用json_encode()将php的二维数组转化成json格式.传递到js中,使用eval()解析得到js的二维数组. 代码: php: <?php header("Content-Type: text/html; charset=utf8") ; $con=mysqli_connect("url",&q