
你可以这样做:(以int型为例)
int **a
int m,n,i
scanf("%d%d",&m,&n)
a=(int**)malloc(m*sizeof(int*)) /*malloc函数在stdlib.h里面,用的时候加入这个头文件*/
for(i=0i<mi++)
a[i]=(int*)malloc(n*sizeof(int))
/*这样以后你就可以把a当作二维数组a[m][n]来用了。。
两种方法: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 (*p)[10]
//动态生成二维数组格式就是相当与p[10][10],如果想改,自己该里面
的参数,如果想定义n行2列就为: p=(int (*)[2])malloc(n*2*sizeof(int))
p=(int (*)[10])malloc(10*10*sizeof(int))
for(i=0i<10i++)
for(j=0j<10j++)
p[i][j]=i*j
for(i=0i<10i++)
{
for(j=0j<10j++)
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 = 0i <linei++)
{
*(p + i) = (int *)malloc(sizeof(int) * row)
if (NULL == *(p + i))
{
return
}
}
/*input data*/
for (i = 0i <linei++)
{
for(j = 0j <rowj++)
{
p[i][j] = i + 1
}
}
/*output data*/
for (i = 0i <linei++)
{
for(j = 0j <rowj++)
{
printf("%d", p[i][j])
}
}
/*free every line point*/
for (i = 0i <linei++)
{
free(*(p + i))
p[i] = NULL
}
free(p)
p = NULL
}
第一种方法数组创建和释放都比较简单
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)