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);就是这个

C语言实现简单动态数组
本文将用C语言实现一个支持存储int类型数据的简单动态数组。你只需要了解简单的结构体和指针使用,再加上一些耐心,就能构建出一个性能一般、功能不完善但可运行的动态数组。在动态数组中,数组结构通过结构体定义。它包括三个属性:count、capacity和nums。count表示当前数组元素个数,capacity表示数组总容量...

c语言中malloc是什么?怎么用?
注意:函数的返回值类型是 void *,void 并不是说没有返回值或者返回空指针,而是返回的指针类型未知。所以在使用 malloc() 时通常需要进行强制类型转换,将 void 指针转换成我们希望的类型,例如:include<stdlib.h> typedef int ListData;ListData *data; \/\/存储空间基址 data = ( ListData * )...

C语言怎么给结构体里的结构体赋值?
c里面是不能这样赋值的, 这种方式只有在定义的时候初始化才可以 如果 int a[][2] = { 2,2}这是正确的,但是定义数组之后再 a = { 2,2}是不正确的, 你还是一个一个赋值吧. 另外说明一下吧, 定义的时候是给变量申请内存, 编译器会把你初始话的值赋值到内存, 但是如果 以后在赋值的时候,...

C++怎么做到动态改变数组长度
\/\/释放int数组空间要访问new所开辟的结构体空间,无法直接通过变量名进行,只能通过赋值的指针进行访问.用new和delete可以动态开辟,撤销地址空间.在编程序时,若用完一个变量(一般是暂时存储的数组),下次需要再用,但却又想省去重新初始化的功夫,可以在每次开始使用时开辟一个空间,在用完后撤销它....

帮忙解释C语言中数据结构的这段代码是什么意思呗!!谢了
p=(struct node*)malloc (sizeof(struct node));这个还是申请空间。。。这是给p申请的大小和类型和上面那个一样 p->data=a[i];然后把你传进来的数组的所存的数赋给p的data域。。。也就是把数组的数开辟一个空间存起来 tail->next=p;然后tail的的next域指向p tail=p;把p移到p的上面那个...

c#语言中结构体如何定义结构体数组?新手求教!
问题1:开辟sizeof(StructStudent)*5个内存空间给数组stsz,并在for循环中使用无参构造方法初始化数组中的所有成员。问题2:如果不执行循环进行初始化,无任何影响,可正常使用。结构在编译时就已经初始化,所有的成员会用默认值进行初始化,而你问题1中是在运行时初始化的。问题3:如果要保存N个结构体...

求以下c语言编程:一个简单的学生成绩管理系统。其中每个学生信息包括学 ...
要求:1)使用结构体数组,每个记录包括num、name、score[3]、average。 2)各功能分别通过函数调用实现。 3)排序采用冒泡法或选择法。 4)查询采用顺序查找方法。菜单:1输入学生资料2删除学生资料 3查询学生资料4修改学生资料 5显示学生资料6统计学生成绩 7排序学生成绩8保存学生资料 9获取帮助信息10退出系统 展开 ...

c++中new和delete的用法
1、例如,我们动态创建了一个一维int数组arr,现在需要将它释放。2、这时只需要使用delete[]数组名即可。3、注意,要释放数组所占的内存,[]不能少。否则,用delete则不能完全释放数组所占内存空间。4、例如,我们为一个二维数组arr动态分配了内存空间。现在需要将它释放。5、这时候,单单使用一句...

数组长度为什么不能是变量
define m 100 define n 100 然后在程序中就可以定义u[m][n]二维数组了,当不一定非要是100,可以是任何一个正整数。C语言里,所有变量空间都是在程序运行之初向系统申请的,包括和指针,它也需要空间,除了一些动态申请方式如malloc函数。没有申请的空间系统是不允许读写的。那么如果一个数组大小是...

C语言怎样循环创建数组
struct s *next;}; \/\/定义了一个结构体 main(){ int i=0;struct s *head,*p;head=p=(struct s *)malloc(sizeof(struct s));\/\/开辟一个新单元 for(i=0;i<2;i++) \/\/定i<2,(如果你想要100个数组,i 就等于100)类似于你定义了2个一维数组 { scanf("%d",p->a);p=...

相似回答