二维数组如何分配动态内存


两种方法:
1.转化为一维数组申请
2.先申请全部行首指针,再按行逐行申请

1.
a=(int *)malloc(sizeof(int),(unsigned)m*n);
使用的时候就和一般的二维数组一样。
#include " stdlib.h"
#include " stdio.h"
#include <malloc.h>

int main()
{
int i,j;
int n;//这个就是需要指定的行数
int (*p)[10];

scanf("%d",&n);//取得行数

//动态生成二维数组,指定列数为10,如果想改,自己该里面
的参数,如果想定义n行2列就为: p=(int (*)[2])malloc(n*2*sizeof(int));
p=(int (*)[10])malloc(n*10*sizeof(int)); //动态申请n行10列的二维数组

for(i=0;i<n;i++)
for(j=0;j<10;j++)
p[i][j]=i*j;

for(i=0;i<n;i++)
{
for(j=0;j<10;j++)
printf("%d,",p[i][j]);

printf("\n");
}
free(p);

return 0;
}

2.
#include <stdio.h>
#include <malloc.h>
main()
{
int i = 0;
int j = 0;
int line = 0;
int row = 0;
int **p = NULL;

printf("input the line of the array:\n");
scanf("%d", &line);
printf("input the row of the array:\n");
scanf("%d", &row);

p = (int **)malloc(sizeof(int *) * line);
if (NULL == p)
{
return;
}
for (i = 0; i < line; i++)
{
*(p + i) = (int *)malloc(sizeof(int) * row);
if (NULL == *(p + i))
{
return;
}
}
/*input data*/
for (i = 0; i < line; i++)
{
for(j = 0; j < row; j++)
{
p[i][j] = i + 1;
}
}
/*output data*/
for (i = 0; i < line; i++)
{
for(j = 0; j < row; j++)
{
printf("%d", p[i][j]);
}
}
/*free every line point*/
for (i = 0; i < line; i++)
{
free(*(p + i));
p[i] = NULL;
}

free(p);
p = NULL;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值