当前位置:首页>开发>正文

c语言如何在动态的结构体数组开辟新空间 C语言 如何动态创建二维数组

2023-06-16 03:26:47 互联网 未知 开发

 c语言如何在动态的结构体数组开辟新空间 C语言 如何动态创建二维数组

c语言如何在动态的结构体数组开辟新空间

你这个已经开辟好了啊,
array = (struct record *)malloc(sizeof(struct record )*num)
就是开辟了num*sizeof(struct record )大小的连续空间
不过你后边对array进行操作时候尽量不要用数组形式,用指针形式会比较好。
开辟好了,你这就是固定的num个元素的数组,
如果要增大这个数组中元素的个数,就是把这个数组变长的话,
只能重新申请新的总个数的空间大小,比如增长m个
就只能重新申请 (struct record *)malloc(sizeof(struct record )*(num m))
然后把原来的数据复制过去,因为数组是连续的空间,必须一次分配好全部内存才行。

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=0ifor(j=0j<10j )
p[i][j]=i*j

for(i=0i{
for(j=0j<10j )
printf("%d,",p[i][j])

printf(" ")
}
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: ")
scanf("%d", &line)
printf("input the row of the array: ")
scanf("%d", &row)

p = (int **)malloc(sizeof(int *) * line)
if (NULL == p)
{
return
}
for (i = 0 i < line i )
{
*(p i) = (int *)malloc(sizeof(int) * row)
if (NULL == *(p i))
{
return
}
}
/*input data*/
for (i = 0 i < line i )
{
for(j = 0 j < row j )
{
p[i][j] = i 1
}
}
/*output data*/
for (i = 0 i < line i )
{
for(j = 0 j < row j )
{
printf("%d", p[i][j])
}
}
/*free every line point*/
for (i = 0 i < line i )
{
free(*(p i))
p[i] = NULL
}

free(p)
p = NULL
}

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

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

这样的方法可行,不过要是题目要求输入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=0ia[i]=(int*)malloc(n*sizeof(int))

/*这样以后你就可以把a当作二维数组a[m][n]来用了。。