C语言 如何动态创建二维数组

C语言 如何动态创建二维数组,第1张

这样的方法可行,不过要是题目要求输入m和n,然后再定义二维数组a[m][n],那就行不通了。

你可以这样做:(以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

}

第一种方法数组创建和释放都比较简单


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/yw/9017374.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-24
下一篇2023-04-24

发表评论

登录后才能评论

评论列表(0条)

    保存