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中添加信息,还要怎么分配,求解答!谢谢
展开
 我来答
糖二灰
推荐于2016-02-22 · TA获得超过3940个赞
知道小有建树答主
回答量:1052
采纳率:75%
帮助的人:1054万
展开全部
你这个已经开辟好了啊,
array = (struct record *)malloc(sizeof(struct record )*num);
就是开辟了num*sizeof(struct record )大小的连续空间
不过你后边对array进行操作时候尽量不要用数组形式,用指针形式会比较好。
开辟好了,你这就是固定的num个元素的数组,
如果要增大这个数组中元素的个数,就是把这个数组变长的话,
只能重新申请新的总个数的空间大小,比如增长m个
就只能重新申请 (struct record *)malloc(sizeof(struct record )*(num+m));
然后把原来的数据复制过去,因为数组是连续的空间,必须一次分配好全部内存才行。
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
tattackor
推荐于2018-05-14 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:884万
展开全部

1、可以在结构体中添加指针类成员变量,并在成员函数中实现动态数组的分配。

2、以下以一个仅实现整型动态数组,不包含其它功能的类为例做说明。

class array //类名
{
    public:
        int *v; //动态数组首地址。
        int length; //动态数组长度。
        array(int len)
        {
            
            if(len <= 0)//初始化长度非法。
            {
                length = 0;
                v = NULL; 
            }
            else
            {
                length = len;
                v = new int[length];//内存分配。
            }
        }
        ~array()
        {
            delete [] v;//析构中释放内存。
        }
};
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
黄晓辉07
2013-07-31 · TA获得超过305个赞
知道小有建树答主
回答量:204
采纳率:0%
帮助的人:183万
展开全部
array = (struct record *)malloc(sizeof(struct record )*num);这就代表你已经开辟了一个空间给array了。

如果你想往里面写东西就可以这样,array.coef = 2.2,array.expn = 3;
追问
这个我知道呀!我的意思是开辟了n个不够用了,还想继续在array里输入,该怎么开辟空间?
追答
你的意思是开辟了n个结构体变量还是不够用,还是说array里面的元素太少,不够用。malloc是动态分配内存,你想什么时候用就可以什么时候用,不是在意空间大小。
你的提问是已经开辟了数组但是我想在往结构体arry中添加信息,还要怎么分配。你用malloc就已经初始化了结构体了,不需要再分配了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mmxxjjhh
2013-07-31
知道答主
回答量:21
采纳率:0%
帮助的人:10万
展开全部
array = (struct record *)malloc(sizeof(struct record )*num);就是这个
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式