#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[])
{
}
程序员面试金典: 9.13 C和C++ 13.10用C编写一个my2DAlloc函数,可分配二维数组。将malloc函数的调用次数降到最少,并确保 可通过arr[i][j]访问该内存。
最新推荐文章于 2022-02-12 00:09:25 发布