zoukankan      html  css  js  c++  java
  • 二维数组作为函数参数传递(C++)

    有时候我们也许会不明白为什么C++中的数组声明的时候下标是需要一个常数,而不能是一个变量吶?也许STL模板库中的向量可以解决变量作为下标的数组声明方式,为了节约一些内存或者是提高一些性能,也为了功能不重复,故而数组中的下标采取了常量的方式。

    int a[5]; //可行的
    
    const int MAX=10;
    int b[MAX]; //可行的
    
    int max=5;
    int c[max];  //不可行
    

    二维数组的声明也是类似的,但是当我们将数组作为函数参数进行传递的时候,一维数组的传递和二维数组的传递是不同的。

         ①. 一维数组:可以不说明数组大小,但在其内部无法获取传入的数组的大小,数组传入函数的时候已经退化为一个指针。
         ②. 二维数组:可以不说明数组行的下标,但是必须说明数组的列的下标。
    

    实际情况却是有些时候我们需要二维数组,但是又不知道它的行数或者列数的情况下,我们可以采用下列的方法来创建一个二维数组。

    ①.知道列数利用动态分配创建一个行数为变量的二维数组

    int (*p)[5];  //p为二维数组变量名,5是指向的二维数组的列数
    p=new int[n][5];   //n可以是一个变量

    ②.不知道行数和列数可以利用一个函数创建一个二维数组。由于该函数传入参数为二级指针的引用,不了解二级指针引用的话可以参考写的关于指针引用的文章。
    二级指针和指针引用函数传参(C++)

    void Make_Two_Array(int **&p,int row,int col)
    {//传入一个二级指针的引用
        p=new int*  [row]; //申请row个指向一维数组的指针
        for(int i=0;i<row;i++)
        {
           p[i]=new int[col]; //申请row个数组,每个数组长度为col
        }
    }

    创建的二维数组结构图示如下:
    二维数组结构:
    这样的一个二维数组删除函数如下:

        void Delete_Two_Array(int **&p,int row)
        {
            for(int i=0;i<row;i++)
            delete []p[i]; //删除所有的行数组空间,p[i]为指针变量,前面的[]代表指向的是一个数组空间
            delete []p; //删除p指向的列空间
            p=NULL;
       }
  • 相关阅读:
    python 包管理工具 pip 的配置
    Python 变量作用域 LEGB (下)—— Enclosing function locals
    Python 变量作用域 LEGB (上)—— Local,Global,Builtin
    2020 Java 面试题 小结 (答案慢慢补上,有错误请指出)
    mysql 根据日期(date)做年,月,日分组统计查询
    jvm指令
    正则表达式 分割地址 获取省市区详细地址
    .Net 异常记录
    WCF设计服务协议(一)
    plsql ORA-01789:查询块具有不正确的结果列数
  • 原文地址:https://www.cnblogs.com/lizijuna/p/11907432.html
Copyright © 2011-2022 走看看