c语言如何在动态的结构体数组开辟新空间
#include<stdio.h>#include<malloc.h>#include<stdlib.h>structrecord{floatcoef;intexpn;}...
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
struct record
{
float coef;
int expn;
};
void main()
{
int num, i;
struct record *array;
array=NULL;
printf("please input the number of element: ");
scanf("%d", &num);
/*申请动态数组使用的内存块*/
array = (struct record *)malloc(sizeof(struct record )*num);
if (array == 0) /*内存申请失败,提示退出*/
{
printf("out of memory,press any key to quit...\n");
exit(0); /*终止程序运行,返回操作系统*/
}
/*提示输入num个数据*/
printf("please input %d elements: ", num);
for (i = 0; i < num; i++)
{
scanf("%f", &array[i].coef);
scanf("%d", &array[i].expn);
}
/*输出刚输入的num个数据*/
printf("%d elements are: \n", num);
for (i = 0; i < num; i++)
{
printf("%f,", array[i].coef);
printf("%d,", array[i].expn);
}
printf("\b \n"); /*删除最后一个数字后的分隔符逗号*/
free(array); /*释放由malloc函数申请的内存块*/
}
这个已经开辟了数组但是我想在往结构体arry中添加信息,还要怎么分配,求解答!谢谢 展开
#include <malloc.h>
#include <stdlib.h>
struct record
{
float coef;
int expn;
};
void main()
{
int num, i;
struct record *array;
array=NULL;
printf("please input the number of element: ");
scanf("%d", &num);
/*申请动态数组使用的内存块*/
array = (struct record *)malloc(sizeof(struct record )*num);
if (array == 0) /*内存申请失败,提示退出*/
{
printf("out of memory,press any key to quit...\n");
exit(0); /*终止程序运行,返回操作系统*/
}
/*提示输入num个数据*/
printf("please input %d elements: ", num);
for (i = 0; i < num; i++)
{
scanf("%f", &array[i].coef);
scanf("%d", &array[i].expn);
}
/*输出刚输入的num个数据*/
printf("%d elements are: \n", num);
for (i = 0; i < num; i++)
{
printf("%f,", array[i].coef);
printf("%d,", array[i].expn);
}
printf("\b \n"); /*删除最后一个数字后的分隔符逗号*/
free(array); /*释放由malloc函数申请的内存块*/
}
这个已经开辟了数组但是我想在往结构体arry中添加信息,还要怎么分配,求解答!谢谢 展开
4个回答
展开全部
你这个已经开辟好了啊,
array = (struct record *)malloc(sizeof(struct record )*num);
就是开辟了num*sizeof(struct record )大小的连续空间
不过你后边对array进行操作时候尽量不要用数组形式,用指针形式会比较好。
开辟好了,你这就是固定的num个元素的数组,
如果要增大这个数组中元素的个数,就是把这个数组变长的话,
只能重新申请新的总个数的空间大小,比如增长m个
就只能重新申请 (struct record *)malloc(sizeof(struct record )*(num+m));
然后把原来的数据复制过去,因为数组是连续的空间,必须一次分配好全部内存才行。
array = (struct record *)malloc(sizeof(struct record )*num);
就是开辟了num*sizeof(struct record )大小的连续空间
不过你后边对array进行操作时候尽量不要用数组形式,用指针形式会比较好。
开辟好了,你这就是固定的num个元素的数组,
如果要增大这个数组中元素的个数,就是把这个数组变长的话,
只能重新申请新的总个数的空间大小,比如增长m个
就只能重新申请 (struct record *)malloc(sizeof(struct record )*(num+m));
然后把原来的数据复制过去,因为数组是连续的空间,必须一次分配好全部内存才行。
展开全部
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
array = (struct record *)malloc(sizeof(struct record )*num);这就代表你已经开辟了一个空间给array了。
如果你想往里面写东西就可以这样,array.coef = 2.2,array.expn = 3;
如果你想往里面写东西就可以这样,array.coef = 2.2,array.expn = 3;
追问
这个我知道呀!我的意思是开辟了n个不够用了,还想继续在array里输入,该怎么开辟空间?
追答
你的意思是开辟了n个结构体变量还是不够用,还是说array里面的元素太少,不够用。malloc是动态分配内存,你想什么时候用就可以什么时候用,不是在意空间大小。
你的提问是已经开辟了数组但是我想在往结构体arry中添加信息,还要怎么分配。你用malloc就已经初始化了结构体了,不需要再分配了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
array = (struct record *)malloc(sizeof(struct record )*num);就是这个
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询