在C++中我们知道:

int *ptr = new int; 这样可以动态分配一个int型指针

int *ptr = new int[3]; 这样可以动态分配一个一维数组

但是如何动态分配一个二维数组呢?像这样:

int **pa = new int[3][3] ?测试一次 => 显然这种分配方式是不正确的:


在尝试新的方法之前,我们需要首先了解二维数组在内存中的存储结构:

理解了这幅图的基本原理,我们就可以进一步将其实现:



一:动态申请二维数组

Step1:

首先我们呀先定义一个数组,用来存放指针

int **array = new int*[3];

☆解析(为什么要使用二维数组?):

首先我们new了一个数组,内部存放了三个指针,然后我们用一个指针指向该数组的首地址:

这里如果array是一级指针,那么当给array[0]再次引出一条指向新内存的线(指针)时,就会出现错误,因为图中红色框框中的每条线对应的就是一个指针,

而当array是一级指针的时候,array[0] 表示的不再是指针,而是指针执行内存中的值,所以这里使用二级指针的根本目的是为了使得能够让array[i]继续指向其他内存空间来产生二维数组的效果。

Step2:

然后我们在进一步为第一步中的每个指针再次分配空间:

for (int i = 0; i < 3; i++)
{array[i] = new int[3];
}

这样就达到了第一步中图片里面的效果,构建了3x3的二维数组;



二:二维数组传参(二维数组作为形参)

void func_1(int** data){cout << *data[0] << endl;
}

注意(使用*data的输出结果):

当数组存储的是字符串时,使用*data会输出该字符串的内容("\0"作为结束标记),如果存储的是数值,那么*data会输出该数组的地址,使用*data[0]即可访问数组中的第一个元素;

实例(main函数传参):

int main(int argc, char** argv)

int main(int argc, char** argv) {cout << "Hello,World!" << endl;char **temp = argv;int length = 0;while(*argv){length++;argv++;}    //Aim to Blank-Addresscout << length << endl;for(int i=0;i<length;i++){cout << temp[i] << endl;}cout << endl;cout << temp << endl;     //Addresscout << *temp << endl;   //string show value; int show addresscout << **temp << endl;    //temp[0][0]return 0;
}


附加:Dev C++快捷键配置(Ctrl+Enter编译执行)

C++ 动态申请二维数组与二维数组传参相关推荐

  1. 编写一个C程序,实现以下功能:动态申请长度为5的整数空间数组,用户输入5个整数;动态扩展数组空间为8,用户另外输入3个整数,最后输出扩展后的全部数组元素。

    DGUT最简单的题.没有之一,只要面向GOOGLE和百度编程就行. 在GOOGLE查询malloc和realloc. malloc:动态申请内存. realloc:动态更改(扩展)内存 代码如下 #d ...

  2. 数组作为函数的参数传参时,数组名会退化为指针

    1.数组作为函数的参数传参时,数组名会退化为指针 数组作为函数的参数传参时,数组名会退化为指针,数值传参时,需要把数值的长度一起传过去,另外,sizeof()运算符包含字符串的哨兵'/0',而strl ...

  3. 将数组转化成字符串进行传参

    将一个数组通过字符串,进行传参 原数组 fjData:[{...},{...}] 先定义一个空的json字符串 let fj = JSON.parse(JSON.stringify({})) 将数组赋 ...

  4. C语言如何动态申请空间(一维和二维)

    C语言如何动态申请一维和二维空间呢? 这里有个小例子,看过后就很容易理解 编译环境为vs2013 #include <stdio.h> #include <stdlib.h> ...

  5. 【C语言进阶】数组、指针、函数——传参篇

    目录 写在前面 一.数组传参 一维数组传参 二维数组传参 二.指针参数 一级指针传参 二级指针传参 三.函数传参 四.看懂代码 写在最后 写在前面 上篇文章介绍了指针数组和数组指针,有兴趣的小伙伴可以 ...

  6. C语言数组在函数中的传参

    在c语言中有时需要数组作为函数的参数进行传参,那么应该怎样传递呢? 先看一下整数作为函数参数时的传参 #include <stdio.h> #include <stdlib.h> ...

  7. router-view、router-link属性、动态路由的使用、路由嵌套、路由传参

    1.router-view可以理解为一个占位符,用来给 当前url映射的组件 占位的,当前url映射的组件 会替换掉 2.router-link是一个全局组件,可以在任何一个vue组件中使用 3.动态 ...

  8. 数组传参中形参的秘密,以及数组名当作函数实际参数的特点,以及二维数组,以及外部变量和全局变量

    1.数组传参中形参的秘密 第三行:形参中不存在数组的概念,即便是中括号约定了数组的大小,也无效. 第二十行:传递的是一个地址,是数组的首地址. 数组名代表了整个数组的首地址. 第二十一行:第一个元素的 ...

  9. [C] 数组指针、指针数组及数组传参

    指针 字符指针 数组指针 指针数组 一维数组传参 1. 整型数组 2. 指针数组 二维数组传参 一级指针传参 二级指针传参 小引 在指针的学习阶段,有不少同学都十分畏惧这个物什,甚至"谈指针 ...

  10. c语言动态申请函数,C语言用malloc函数申请二维动态数组

    C语言在程序运行中动态的申请及释放内存十分方便,一维数组的申请及释放比较简单. Sample one #include int main() { char * p=(char *)malloc(siz ...

最新文章

  1. Nginx 安装及配置
  2. Python实训day09am【Pandas、Series、DataFrame数据帧】
  3. Merge Two Sorted Lists LeetCode
  4. Shell脚本中$的用法
  5. 洛咕 P4474 王者之剑
  6. 测试RESTful服务的客户端
  7. ICMP Internet控制报文协议
  8. php软件开发--sphinx索引静态化及伪静态
  9. 数组的内存理解(图示)
  10. 【Kafka】Kafka WARN Property ssl.keystore.location is not valid (kafka.utils.VerifiableProperties)
  11. 《AutoCAD 2016中文版从入门到精通》——1.5 基本输入操作
  12. [Note] FrameFab Interesting Cut Results
  13. css-布局1-基本属性
  14. Yii2 log分析
  15. pythonnumpy算术函数_python的numpy.prod函数运行实例详解
  16. android 6.0 创建文件或文件夹失败
  17. VS2003安装方法----转载
  18. linux 筛选重复数据,Linux下uniq筛选
  19. 自学鸿蒙应用开发(7)- Picker组件
  20. Java 提取PDF图片(pdfbox)Extract PDF document images

热门文章

  1. webrtc音频处理源码概述
  2. 计算机网络ABCD,计算机网络理及应用试卷(ABCDE).doc
  3. 基因结构图的0_在线网站绘制基因结构图!
  4. 计算机wps文字背景怎么设置,如何在wps文本中添加背景以及如何将图片设置为页面背景...
  5. 计算机桌面ie图标无法删除,桌面IE浏览器图标无法删除怎么办
  6. -bash: ulimit: max user processes: cannot modify limit: Operation not permitted问题的处理
  7. ROC曲线下面积为什么越大越好 (TPR FPR)
  8. 华为模拟器eNSP防火墙配置vlan实验
  9. 802.11/wlan/wifi/无线相关学习资料整理
  10. 深度剖析JVM常量池,String字符串相关八股文,茴香豆的茴有几种写法?