打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
用malloc分配动态二维数组
1. 动态数组的成员都可以用正常的数组下标 Array[i][j]
#include <stdio.h>
#include <stdlib.h>
void main()
{
int nrows,ncolumns;
int **Array;
int i,j;
printf("please input nrows&ncolumns:/n");
scanf("%d%d",&nrows,&ncolumns);
Array=(int **)malloc(nrows*sizeof(int *));
for(i=0;i<nrows;i++)
Array[i]=(int *)malloc(ncolumns*sizeof(int));
for(i=0;i<nrows;i++)
{
for(j=0;j<ncolumns;j++)
{
Array[i][j]=1;
printf("%d ",Array[i][j]);   //动态数组的成员都可以用正常的数组下标 Array[i][j]
}
printf("/n");
}
free(Array);
}
pp] view plain copy
#include <stdio.h>
#include <stdlib.h>
void main()
{
int nrows,ncolumns;
int **Array;
int i,j;
printf("please input nrows&ncolumns:/n");
scanf("%d%d",&nrows,&ncolumns);
Array=(int **)malloc(nrows*sizeof(int *));
for(i=0;i<nrows;i++)
Array[i]=(int *)malloc(ncolumns*sizeof(int));
for(i=0;i<nrows;i++)
{
for(j=0;j<ncolumns;j++)
{
Array[i][j]=1;
printf("%d ",Array[i][j]);   //动态数组的成员都可以用正常的数组下标 Array[i][j]
}
printf("/n");
}
free(Array);
#include <stdio.h>
#include <stdlib.h>
void main()
{
int nrows,ncolumns;
int **Array;
int i,j;
printf("please input nrows&ncolumns:/n");
scanf("%d%d",&nrows,&ncolumns);
Array=(int **)malloc(nrows*sizeof(int *));
Array[0]=(int *)malloc(nrows*ncolumns*sizeof(int));
for(i=1;i<nrows;i++)
Array[i]=Array[0]+i*ncolumns;
for(i=0;i<nrows;i++)
{
for(j=0;j<ncolumns;j++)
{
Array[i][j]=1;
printf("%d ",Array[i][j]);   //动态数组的成员都可以用正常的数组下标 arrayx[i][j]
}
printf("/n");
}
free(Array);
}
}
2. 让数组的内容连续, 但在后来重新分配列的时候会比较困难, 得使用一点指针算术:
#include <stdio.h>
#include <stdlib.h>
void main()
{
int nrows,ncolumns;
int **Array;
int i,j;
printf("please input nrows&ncolumns:/n");
scanf("%d%d",&nrows,&ncolumns);
Array=(int **)malloc(nrows*sizeof(int *));
Array[0]=(int *)malloc(nrows*ncolumns*sizeof(int));
for(i=1;i<nrows;i++)
Array[i]=Array[0]+i*ncolumns;
for(i=0;i<nrows;i++)
{
for(j=0;j<ncolumns;j++)
{
Array[i][j]=1;
printf("%d ",Array[i][j]);   //动态数组的成员都可以用正常的数组下标 arrayx[i][j]
}
printf("/n");
}
free(Array);
}
[cpp] view plain copy
#include <stdio.h>
#include <stdlib.h>
void main()
{
int nrows,ncolumns;
int **Array;
int i,j;
printf("please input nrows&ncolumns:/n");
scanf("%d%d",&nrows,&ncolumns);
Array=(int **)malloc(nrows*sizeof(int *));
Array[0]=(int *)malloc(nrows*ncolumns*sizeof(int));
for(i=1;i<nrows;i++)
Array[i]=Array[0]+i*ncolumns;
for(i=0;i<nrows;i++)
{
for(j=0;j<ncolumns;j++)
{
Array[i][j]=1;
printf("%d ",Array[i][j]);   //动态数组的成员都可以用正常的数组下标 arrayx[i][j]
}
printf("/n");
}
free(Array);
}
3. 同一个单独的动态分配的一维数组来模拟二维数组:
#include <stdio.h>
#include <stdlib.h>
void main()
{
int nrows,ncolumns;
int *Array;
int i,j;
printf("please input nrows&ncolumns:/n");
scanf("%d%d",&nrows,&ncolumns);
Array=(int *)malloc(nrows*ncolumns*sizeof(int *));
for(i=0;i<nrows;i++)
{
for(j=0;j<ncolumns;j++)
{
Array[i*nrows+j]=1;
printf("%d ",Array[i*nrows+j]);   //用 array3[i * ncolumns + j] 访问第 i, j 个成员
}
printf("/n");
}
free(Array);
}
[cpp] view plain copy
#include <stdio.h>
#include <stdlib.h>
void main()
{
int nrows,ncolumns;
int *Array;
int i,j;
printf("please input nrows&ncolumns:/n");
scanf("%d%d",&nrows,&ncolumns);
Array=(int *)malloc(nrows*ncolumns*sizeof(int *));
for(i=0;i<nrows;i++)
{
for(j=0;j<ncolumns;j++)
{
Array[i*nrows+j]=1;
printf("%d ",Array[i*nrows+j]);   //用 array3[i * ncolumns + j] 访问第 i, j 个成员
}
printf("/n");
}
free(Array);
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
你必须知道的495个C语言问题 读书笔记
C语言的那些小秘密之动态数组
【转载】C/C++的面试题
螺旋数组,之字形数组
bzero & memset置零的性能比较
C语言实现动态数组,克服静态数组大小固定的缺陷
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服