二维数组动态存储分配

    为什么要使用动态存储分配?我想这个问题的答案可以归结于三点:

    1  在定义一个二维数组的时候我事先并不知晓要给他分配具体多少行多少列时

    2  算法移植到芯片的时候考虑节省内存时

    3  子函数调用想要很方便的传递二维数组的地址时

    单就第一点而言,也许有同学会问,你自己写程序你怎么会不知道要给他分配多少空间?但事实就是,当你身在团队之中,很多时候你都是只知道接口给你传递过来的某些参数,而这些参数的值你不知道也就不足为奇了。关于上面的1和2两点我想是使用动态分配内存的最关键的原因,至于第三点不算是太重要,因为静态的二维数组也可以通过子函数去传递数组的地址,只不过那个稍微有点麻烦而已。

    好吧,看一个小小的程序实例,在main函数中动态的分配了二维数组a和b,调用InitArray函数分别初始化a中所有元素为1,b中所有元素为2,调用SumArrar函数实现两个数组相加,相加的结果依然存放到数组a中。

#include <stdio.h>

void InitArray(int **Arr, int row, int col, int x)
{
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			Arr[i][j] = x;
		}
	}
}


void PrintArray(int **Arr, int row, int col)
{
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			printf("%d ", Arr[i][j]);
		}
		printf("\n");
	}
}

void SumArray(int **ArrayA, int **ArrayB, int row, int col)
{
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			ArrayA[i][j] = ArrayA[i][j] + ArrayB[i][j];
		}
	}
}

void main()
{
	int row = 3;
	int col = 4;
	int **a;
	int **b;
	a = new int *[row];
	b = new int *[row];
	for (int i = 0; i < col; i++)
	{
		a[i] = new int[col];
		b[i] = new int[col];
	}

	InitArray(a,row,col,1);
	InitArray(b,row,col,2);
	SumArray(a,b,row,col);
	PrintArray(a,row,col);
	
}

    可以看到,这个分配方式是很方便的,尤其要说的是在调用子函数传递数组的地址时简洁明了。

    动态分配的内存如何释放呢?但看此例,假如我们已经使用完了a和b之后,他们的空间就不需要在驻留到内存了,释放起来也是非常简单的。

for (int i = 0; i < row; i++)
	{
		delete[] a[i];
		delete[] b[i];
	}
	delete[] a;
	delete[] b;


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值