C语⾔⽤malloc开辟⼆维数组⽤malloc可以开辟空间 对于⼆维数组来说 我们开辟的话同样也可以⽤malloc来开辟
以下⽤不同⽅法开辟⼆维数组均为开辟三⾏四列为的⼆维数组。
1.利⽤指针数组
存储⽰意图:
代码如下:
int main()
{
int**p=(int**)malloc(3*sizeof(int*));//竖的格⼦申请好了
for(int i =0; i <3; i++)//右⾯格⼦为int
{
p[i]=(int*)malloc(4*sizeof(int));
}
for(int i =0; i <3; i++)
{
for(int j =0; i <4; j++)
{
printf("%p\n",&p[i][j]);
}
}
for(int i =0; i <3; i++)//进⾏释放
{怎么定义二维数组c语言
free(p[i]);
}
free(p);//注意前⾯的那⼀部分同样需要释放
return0;
}
缺点:从上⾯⽰意图就可以看出每⼀⾏地址连续 但不可以保证上⼀⾏的尾和下⼀⾏的头相连。
正是因为如此进⾏释放的时候就会很⿇烦 容易造成内存泄漏
共需要释放48+12=60个字节 。
2.利⽤数组指针
存储⽰意图:
代码如下:
int main()
{
int(*p)[4]=(int(*)[4])malloc(3*4*sizeof(int));
for(int i =0; i <3; i++)
{
for(int j =0; i <4; j++)
{
printf("%p\n",&p[i][j]);
}
}
free(p);
return0;
}
运⽤数组指针的话,申请的内存是连续的12个格⼦。
考虑到内存泄漏的话 就是48个字节 只需要free⼀次即可 ⽐⼆维数组释放更加⽅便。
3.利⽤⼀维数组
利⽤⼀维数组的实质其实就是:⽤⼆维数组的思想去申请管理⼀维数组
代码如下:
int main()
{
int* p =(int*)malloc(3*4*sizeof(int));
for(int i =0; i <3; i++)
{
for(int j =0; i <4; j++)
{
p[i *4+ j]=1;//p[i][j]不允许这样写
printf("%p\n",&p[i *4+ j]);
}
}
free(p);
return0;
}
利⽤⼀维数组的话 虽然是⽤⼆维数组的思想去申请管理⼀维数组,但是开辟的同样是连续的12个内存单元。
(⼩⽩⼀枚 如有错误 欢迎⼤佬指正)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论