首页 > 文章列表 > 如何在连续的内存空间中创建动态多维数组

如何在连续的内存空间中创建动态多维数组

数组创建动态
473 2024-01-29

如何创建动态的多维数组且内存空间连续

如何创建动态的多维数组且内存空间连续

#include

#include // 申请动态内存需要的头文件

int main()

{

int n1, n2, i, j;

printf("输入行数");

scanf("%d", &n1);

getchar();

printf("输入列数");

scanf("%d", &n2);

getchar();

int *arr; //定义一个二级指针用来接收下面 malloc分配的(sizeof(int *) * n1) 个内存空间的首地址。

arr= (int *) malloc(sizeof(int) * (n1*n2));// 一次性分配n1*n2个内存单元 满足你说的内存连续(注意这里是指虚拟地址哦,不是物理地址)

printf("下面为数组每个元素赋值n");

for(i = 0; i < n1; i++)

{

for(j = 0; j < n2; j++)

{

printf("输入%d行 第%d个元素的值", i+1, j+1);

scanf("%d", arr+i*n2+j);

}

}

printf("二维数组中的值:n");

for(i = 0; i < n1; i++)

{

for(j = 0; j < n2; j++)

{

printf("%dt", *(arr+i*n2+j));

}

putchar('n');

}

}

/*

建议用电脑看我的回答。

运行结果:

输入行数3

输入列数3

下面为数组每个元素赋值

输入1行 第1个元素的值1

输入1行 第2个元素的值2

输入1行 第3个元素的值3

输入2行 第1个元素的值4

输入2行 第2个元素的值5

输入2行 第3个元素的值6

输入3行 第1个元素的值7

输入3行 第2个元素的值8

输入3行 第3个元素的值9

二维数组中的值:

1 2 3

4 5 6

7 8 9

Press any key to continue

总结:其实就是利用了malloc在内存堆中分配内存。在程序23行 scanf("%d", arr+i*n2+j); 语句中 方

向没有我们利用了n2这值也就是二维数组的'列数‘ 这么做也就是为了 像你说的内存连续。

可是malloc分配的其实是虚拟内存,其实是不连续的。只是逻辑上的连续。物理地址不连续。就像链表。

要是有不对的地方请指出。。。。

就当复习了

^_^

*/

如何动态构建多维数组c语言

两种方法:

1.转化为一维数组申请

2.先申请全部行首指针,再按行逐行申请

1.

a=(int *)malloc(sizeof(int),(unsigned)m*n);

使用的时候就和一般的二维数组一样。

举个例子给你:

#include "stdlib.h"

#include "stdio.h"

#include

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;ifor(j=0;jp[i][j]=i*j;

for(i=0;i{

for(j=0;jprintf("%d,",p[i][j]);

printf("n");

}

free(p);

return 0;

}

2.

这个也给你举个例子吧:

#include

#include

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 {

*(p + i) = (int *)malloc(sizeof(int) * row);

if (NULL == *(p + i))

{

return;

}

}

/*input data*/

for (i = 0; i {

for(j = 0; j {

p[i][j] = i + 1;

}

}

/*output data*/

for (i = 0; i {

for(j = 0; j {

printf("%d", p[i][j]);

}

}

/*free every line point*/

for (i = 0; i {

free(*(p + i));

p[i] = NULL;

}

free(p);

p = NULL;

}

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

如何动态建立一个数组键盘输入用C语言

#include

2

3 int main ()

4 {

5 int i,j;

6 printf("请输入数组维数:");

7 scanf("%d%d",&i,&j);

8

9 int a[i][j];

10 int m,n;

11 int flag = 1;

12

13 for (m = 0;m < i;m++)

14 {

15 for (n = 0;n < j;n++)

16 scanf("%d",&a[m][n]);

17 }

for (m = 0;m < i;m++)

34 {

35 for (n = 0;n < j;n++)

36 printf("%4d",a[m][n]);

37 printf("n");

38 }

return 0;

40 }