提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
前言
一、思路分析
二、实现
总结
前言
最近在做题的时候发现一个比较考验技术的问题,用内存函数模拟实现二维数组,接下来给大家演示一下我的做题思路。
一、思路分析
首先malloc函数返回值是一个指针,所以我们肯定得用到指针的知识,其次,二维数组可以理解成几个一维数组的组合,我们通过一级指针可以创建一个一维数组,所以我们可以通过接受一维数组的地址来实现二维数组,所以要开辟一个二级指针。
二、实现
有了上面的思路,我们可以轻易的写出如下代码:
int main() {//开辟空间int** p = (int**)malloc(3 * sizeof(int*));//int *(*p) 行if (p == NULL){assert(p);}for (int i = 0; i < 3; i++){p[i] = (int*)malloc(5 * sizeof(int*));//列if (p == NULL){assert(p);}}//使用空间for (int i = 0; i < 3; i++){for (int j = 0; j < 5; j++) {p[i][j] = i * 5 + j;//给二维数组赋值//0*5+0 0*5+1 0*5+2 ....printf("%d\t", p[i][j]);}printf("\n");}//释放空间//由于开辟了两次空间for (int i = 0; i < 3; i++){free(p[i]);}free(p);p == NULL;return 0;
}
总结
用动态内存开辟二维数组是比较难想的一个知识点,需要大家好好思考,期待下一次我们一起van♂。