malloc申请⼆维数组的四种⽅法⽅法⼀: ⼆级指针
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,j;
int row = 4,col = 5;
//申请⼀个 4⾏ 5列的⼆维数组
int **ar = (int**)malloc(sizeof(int*) * row);  //sizeof(int*),不能少*,⼀个指针的内存⼤⼩,每个元素是⼀个指针。
for (i = 0;i < row;i++)
{
ar[i] = (int*)malloc(sizeof(int) * col);
}
for (i = 0;i < row;i++)
{
for (j = 0;j < col;j++)
{
printf("%p  ",&ar[i][j]);
}指针与二维数组
printf("\n");
}
for (i = 0;i < row;i++)
free(ar[i]);
free(ar);
return 0;
}
运⾏结果  可见地址是连续的,且int⼤⼩为4个字节
⽅法⼆: 数组指针
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,j;
int row = 4,col = 5;
//申请⼀个 4⾏ 5列的⼆维数组
int (*ar)[col] = (int(*)[col])malloc(sizeof(int) * row * col);  //(*ar) 括号不能少,[]优先级⾼,少了就是指针数组了
for (i = 0;i < row;i++)
{
for (j = 0;j < col;j++)
{
printf("%p  ",&ar[i][j]);
}
printf("\n");
}
free(ar);
return 0;
}
运⾏结果
⽅法三: ⼀维数组模拟⼆维数组
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,j;
int row = 4,col = 5;
//申请⼀个 4⾏ 5列的⼆维数组
int *ar =(int*)malloc(sizeof(int) * row * col);
for (i = 0;i < row;i++)
{
for (j = 0;j < col;j++)
{
printf("%p  ",&ar[i * col + j]);
}
printf("\n");
}
free(ar);
return 0;
}
运⾏结果
⽅法四: ⽤结构体,每个结构体定义 col个元素的⼀维数组,不过这样⽤不⽅便且繁琐。
typedef struct {
int a[5];
}item;
item *ar = (item*)malloc(sizeof(item) * 4);
总结:⼏种⽅法都可以动态的申请⼆维数组,但就我做题来看,⼏乎⽤的全是第⼀种和第⼆种⽅法。如果以指针为参数传递给⼀个函数⼀个⼆维数组要⽤⽅法⼀,⽅法⼆会报错。不过⽅法⼆简洁,只需要⼀⾏代码。malloc内存⽤完后记得要free释放哦
谢谢。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。