C++ 动态申请二维数组与二维数组传参
在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++ 动态申请二维数组与二维数组传参相关推荐
- 编写一个C程序,实现以下功能:动态申请长度为5的整数空间数组,用户输入5个整数;动态扩展数组空间为8,用户另外输入3个整数,最后输出扩展后的全部数组元素。
DGUT最简单的题.没有之一,只要面向GOOGLE和百度编程就行. 在GOOGLE查询malloc和realloc. malloc:动态申请内存. realloc:动态更改(扩展)内存 代码如下 #d ...
- 数组作为函数的参数传参时,数组名会退化为指针
1.数组作为函数的参数传参时,数组名会退化为指针 数组作为函数的参数传参时,数组名会退化为指针,数值传参时,需要把数值的长度一起传过去,另外,sizeof()运算符包含字符串的哨兵'/0',而strl ...
- 将数组转化成字符串进行传参
将一个数组通过字符串,进行传参 原数组 fjData:[{...},{...}] 先定义一个空的json字符串 let fj = JSON.parse(JSON.stringify({})) 将数组赋 ...
- C语言如何动态申请空间(一维和二维)
C语言如何动态申请一维和二维空间呢? 这里有个小例子,看过后就很容易理解 编译环境为vs2013 #include <stdio.h> #include <stdlib.h> ...
- 【C语言进阶】数组、指针、函数——传参篇
目录 写在前面 一.数组传参 一维数组传参 二维数组传参 二.指针参数 一级指针传参 二级指针传参 三.函数传参 四.看懂代码 写在最后 写在前面 上篇文章介绍了指针数组和数组指针,有兴趣的小伙伴可以 ...
- C语言数组在函数中的传参
在c语言中有时需要数组作为函数的参数进行传参,那么应该怎样传递呢? 先看一下整数作为函数参数时的传参 #include <stdio.h> #include <stdlib.h> ...
- router-view、router-link属性、动态路由的使用、路由嵌套、路由传参
1.router-view可以理解为一个占位符,用来给 当前url映射的组件 占位的,当前url映射的组件 会替换掉 2.router-link是一个全局组件,可以在任何一个vue组件中使用 3.动态 ...
- 数组传参中形参的秘密,以及数组名当作函数实际参数的特点,以及二维数组,以及外部变量和全局变量
1.数组传参中形参的秘密 第三行:形参中不存在数组的概念,即便是中括号约定了数组的大小,也无效. 第二十行:传递的是一个地址,是数组的首地址. 数组名代表了整个数组的首地址. 第二十一行:第一个元素的 ...
- [C] 数组指针、指针数组及数组传参
指针 字符指针 数组指针 指针数组 一维数组传参 1. 整型数组 2. 指针数组 二维数组传参 一级指针传参 二级指针传参 小引 在指针的学习阶段,有不少同学都十分畏惧这个物什,甚至"谈指针 ...
- c语言动态申请函数,C语言用malloc函数申请二维动态数组
C语言在程序运行中动态的申请及释放内存十分方便,一维数组的申请及释放比较简单. Sample one #include int main() { char * p=(char *)malloc(siz ...
最新文章
- Nginx 安装及配置
- Python实训day09am【Pandas、Series、DataFrame数据帧】
- Merge Two Sorted Lists LeetCode
- Shell脚本中$的用法
- 洛咕 P4474 王者之剑
- 测试RESTful服务的客户端
- ICMP Internet控制报文协议
- php软件开发--sphinx索引静态化及伪静态
- 数组的内存理解(图示)
- 【Kafka】Kafka WARN Property ssl.keystore.location is not valid (kafka.utils.VerifiableProperties)
- 《AutoCAD 2016中文版从入门到精通》——1.5 基本输入操作
- [Note] FrameFab Interesting Cut Results
- css-布局1-基本属性
- Yii2 log分析
- pythonnumpy算术函数_python的numpy.prod函数运行实例详解
- android 6.0 创建文件或文件夹失败
- VS2003安装方法----转载
- linux 筛选重复数据,Linux下uniq筛选
- 自学鸿蒙应用开发(7)- Picker组件
- Java 提取PDF图片(pdfbox)Extract PDF document images
热门文章
- webrtc音频处理源码概述
- 计算机网络ABCD,计算机网络理及应用试卷(ABCDE).doc
- 基因结构图的0_在线网站绘制基因结构图!
- 计算机wps文字背景怎么设置,如何在wps文本中添加背景以及如何将图片设置为页面背景...
- 计算机桌面ie图标无法删除,桌面IE浏览器图标无法删除怎么办
- -bash: ulimit: max user processes: cannot modify limit: Operation not permitted问题的处理
- ROC曲线下面积为什么越大越好 (TPR FPR)
- 华为模拟器eNSP防火墙配置vlan实验
- 802.11/wlan/wifi/无线相关学习资料整理
- 深度剖析JVM常量池,String字符串相关八股文,茴香豆的茴有几种写法?