在C中如何定义一个动态的二维数组?
在C中如何定义不个动态的二维数组,行(x)和列(y)都可以手动输入,请高人给出代码。小弟先谢过了。(一维的我会,二维的不知怎么写了)...
在C中如何定义不个动态的二维数组,行(x)和列(y)都可以手动输入,请高人给出代码。
小弟先谢过了。(一维的我会,二维的不知怎么写了) 展开
小弟先谢过了。(一维的我会,二维的不知怎么写了) 展开
3个回答
展开全部
一般来讲两种办法:
第一种:连续内存分配
#include "stdio.h"
#include "stdlib.h"
int main()
{
int x,y;
int *p;
scanf("%d%d",&x,&y);
p=(int *)malloc(x*y*sizeof(int));
.....//这样定义要访问第i行第j列应该用*(p+i*y+j)
free(p);
return 0;
}
第二种:通过指针数组+二级指针
#include "stdio.h"
int main()
{
int x,y;//x行y列
int i,j;
int **p;
scanf("%d%d",&x,&y);
p=(int **)malloc(x*sizeof(int*));
if(p==NULL)//分配失败
{
//printf("内存分配失败!\n");
exit(0);
}
for(i=0;i<x;i++)
{
p[i]=(int *)malloc(y*sizeof(int));
if(p[i]==NULL)//分配失败
{
//printf("内存分配失败!\n");
for(j=0;j<i;j++)
free(p[j]);
free(p);
exit(0);
}
}
........//访问第i行第j列:p[i][j]
for(i=0;i<x;i++)//释放内存
free(p[i]);
free(p);
return 0;
}
推荐第二种。。比第一种灵活。
其它几位回复者注意要求用C而不是CPP,并且考虑到C规定变量定义放在所有语句之前。
第一种:连续内存分配
#include "stdio.h"
#include "stdlib.h"
int main()
{
int x,y;
int *p;
scanf("%d%d",&x,&y);
p=(int *)malloc(x*y*sizeof(int));
.....//这样定义要访问第i行第j列应该用*(p+i*y+j)
free(p);
return 0;
}
第二种:通过指针数组+二级指针
#include "stdio.h"
int main()
{
int x,y;//x行y列
int i,j;
int **p;
scanf("%d%d",&x,&y);
p=(int **)malloc(x*sizeof(int*));
if(p==NULL)//分配失败
{
//printf("内存分配失败!\n");
exit(0);
}
for(i=0;i<x;i++)
{
p[i]=(int *)malloc(y*sizeof(int));
if(p[i]==NULL)//分配失败
{
//printf("内存分配失败!\n");
for(j=0;j<i;j++)
free(p[j]);
free(p);
exit(0);
}
}
........//访问第i行第j列:p[i][j]
for(i=0;i<x;i++)//释放内存
free(p[i]);
free(p);
return 0;
}
推荐第二种。。比第一种灵活。
其它几位回复者注意要求用C而不是CPP,并且考虑到C规定变量定义放在所有语句之前。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
应该是这样的吧,至于free的话,LZ尝试下自己写……
int x,y;
scanf("%d%d",&x,&y);
int array[x][y];
或者
int x,y;
scanf("%d%d",&x,&y);
int** array=(int**)malloc(sizeof(int*)*y);
int i;
for(i=0;i<y;i++)
array[i]=(int*)malloc(sizeof(int)*x);
int x,y;
scanf("%d%d",&x,&y);
int array[x][y];
或者
int x,y;
scanf("%d%d",&x,&y);
int** array=(int**)malloc(sizeof(int*)*y);
int i;
for(i=0;i<y;i++)
array[i]=(int*)malloc(sizeof(int)*x);
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//我用new做的。。呵呵,
#include "stdio.h"
int main()
{
int x,y;
scanf("%d%d",&x,&y);
int** a=new int* [x];
for(int i=0;i<x;i++)
{
a[i]=new int[y];
}
for(i=0;i<x;i++)
for(int j=0;j<y;j++)
a[i][j]=i;
for(i=0;i<x;i++)
for(int j=0;j<y;j++)
printf("%d\n",a[i][j]);
}
#include "stdio.h"
int main()
{
int x,y;
scanf("%d%d",&x,&y);
int** a=new int* [x];
for(int i=0;i<x;i++)
{
a[i]=new int[y];
}
for(i=0;i<x;i++)
for(int j=0;j<y;j++)
a[i][j]=i;
for(i=0;i<x;i++)
for(int j=0;j<y;j++)
printf("%d\n",a[i][j]);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询