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;
       }
  • 相关阅读:
    Proj THUDBFuzz Paper Reading: The Art, Science, and Engineering of Fuzzing: A Survey
    Proj THUDBFuzz Paper Reading: A systematic review of fuzzing based on machine learning techniques
    9.3 付费代理的使用
    11.1 Charles 的使用
    第十一章 APP 的爬取
    10.2 Cookies 池的搭建
    10.1 模拟登录并爬取 GitHub
    11.5 Appium 爬取微信朋友圈
    11.4 Appium 的基本使用
    11.3 mitmdump 爬取 “得到” App 电子书信息
  • 原文地址:https://www.cnblogs.com/lizijuna/p/11907432.html
Copyright © 2011-2022 走看看