程序员面试金典: 9.13 C和C++ 13.10用C编写一个my2DAlloc函数,可分配二维数组。将malloc函数的调用次数降到最少,并确保 可通过arr[i][j]访问该内存。

#include <iostream>
#include <stdio.h>

using namespace std;

/*
问题:用C编写一个my2DAlloc函数,可分配二维数组。将malloc函数的调用次数降到最少,并确保
      可通过arr[i][j]访问该内存。
分析:分配二维数组,可以转化为分配一维数组,不过需要进行转换,转换公式为
      分配长度为 n * m的一维数组arr1,
	  arr[i][j] = arr1[i * m + j],但如果是这样下标似乎不可以直接访问,因为我需要进行一个转换
	  难道是分配长度为m的数组n个?
关键:
1 二维数组除了等于一维数组外,还可以用指针的指针表示。先创建一维指针数组,为每个数组索引,
        再创建一个一维数组。得到二维数组。
		这不就是之前创建 int** ptr = new int[size];的方法吗

*/

int** my2Alloc(int rows, int cols)
{
	int** ptr = (int**) malloc( rows * sizeof(int*));//每一行存放的是指针
	for(int i = 0 ; i < rows ; i++)
	{
		ptr[i] = (int*) malloc( cols * sizeof(int) );//每一列存放的是整数
	}
	return ptr;
}

void my2Free(int** rowptr , int rows)
{
	for(int i = 0 ; i < rows ; i++)
	{
		free(rowptr[i]);
	}
	free(rowptr);
}

int main(int argc , char* argv[])
{
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值