提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
前言
一、思路分析
二、实现
总结
前言
最近在做题的时候发现一个比较考验技术的问题,用内存函数模拟实现二维数组,接下来给大家演示一下我的做题思路。
一、思路分析
首先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♂。