C++ 动态申请二维数组与二维数组传参

C++ 专栏收录该内容
38 篇文章 3 订阅

在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-Address
	cout << length << endl;
	
	for(int i=0;i<length;i++){
		cout << temp[i] << endl;
	}
	cout << endl;
	cout << temp << endl;     //Address
	cout << *temp << endl;   //string show value; int show address
	cout << **temp << endl;    //temp[0][0]
	return 0;
}


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

  • 13
    点赞
  • 7
    评论
  • 48
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 点我我会动 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值