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

#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中添加信息,还要怎么分配,求解答!谢谢

你这个已经开辟好了啊,
array = (struct record *)malloc(sizeof(struct record )*num);
就是开辟了num*sizeof(struct record )大小的连续空间
不过你后边对array进行操作时候尽量不要用数组形式,用指针形式会比较好。
开辟好了,你这就是固定的num个元素的数组,
如果要增大这个数组中元素的个数,就是把这个数组变长的话,
只能重新申请新的总个数的空间大小,比如增长m个
就只能重新申请 (struct record *)malloc(sizeof(struct record )*(num+m));
然后把原来的数据复制过去,因为数组是连续的空间,必须一次分配好全部内存才行。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-05-14

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;//析构中释放内存。
        }
};

本回答被网友采纳
第2个回答  2013-07-31
array = (struct record *)malloc(sizeof(struct record )*num);这就代表你已经开辟了一个空间给array了。

如果你想往里面写东西就可以这样,array.coef = 2.2,array.expn = 3;追问

这个我知道呀!我的意思是开辟了n个不够用了,还想继续在array里输入,该怎么开辟空间?

追答

你的意思是开辟了n个结构体变量还是不够用,还是说array里面的元素太少,不够用。malloc是动态分配内存,你想什么时候用就可以什么时候用,不是在意空间大小。
你的提问是已经开辟了数组但是我想在往结构体arry中添加信息,还要怎么分配。你用malloc就已经初始化了结构体了,不需要再分配了

第3个回答  2013-07-31
array = (struct record *)malloc(sizeof(struct record )*num);就是这个
相似回答