关于动态分配内存
请教各位大虾一下,关于动态分配内存的问题.1.何时动态分配内存?以前用指针的时候比如int*p直接就可以用了啊为什么后来学到链表定义完结构体指针new还要再给new分配内...
请教各位大虾一下, 关于动态分配内存的问题.1.何时动态分配内存? 以前用指针的时候 比如 int *p 直接就可以用了啊 为什么后来学到链表 定义完 结构体指针 new 还要再给new 分配内存? 难道不是在定义的时候就分配好了? 跟之前学的有什么区别吗? 2. 链表中 头指针 head 内需要存放 结构体中数据吗? 比如说 建立一个学生信息的链表 每个节点都用来存放一个学生的基本信息, 那么head 里面也需要存放吗? 还是说 head 只是用来指着第一个学生信息的节点?3.当我添加信息的时候 比如学生信息链表中, 每次添加一个信息 需要定义一个new 然后分配内存 然后当我输入学生信息的时候 可以直接在输入语句中引用new的成员变量吗 比如 scanf("%d",&new->score); 我书上为什么每次都是先定义一个普通变量 先输入到普通变量中 第二部在把那个变量的值赋给new的成员变量?
展开
2个回答
2013-09-24
展开全部
1、动态分配内存一般都用在数组,线性表,栈,串这些数据结构中,当你写程序的时候需要组织一堆数据,且有插入删除操作的,最好用动态分配内存,更节约内存空间。int *p并没有动态分配,P只是一个指针(指向某个地址的变量), 只不过指针经常与 molloc函数一起用,让你混淆了。 定义了一个结点 也只是定义,还没有在内存中申请单元,C++中使用new关键字来申请。2、头指针head 指向头结点L, L中不存放数据,L的指针域指向第一个结点(楼主需要搞清楚 头结点和第一个结点)。 head→next 一般只用来指向第一个结点。3、 new是关键字,怎么能定义一个new呢?
2013-09-24
展开全部
动态分配内存主要是为了提高内存的使用效率。
当数据量不能确定时,一般都会使用动态分配内存的方法。当然也可以预先估计一个值,定义数组也可以实现,但预先估计的值需要多大,大了,浪费资源,小了有不够用,怎样才能不多不少,当然最好是,有一个数据,给一块地方。对吧?你们使用new表示新指针不是一个好的习惯,容易产生二义性。可以换换比如使用pnew也比直接使用new要好。之所以说动态,就是用到再申请,所以程序中经常在使用前提出申请,然后分配,然后存放数据,然后接到链表中。一般都是如此。
2。现在一般头指针中不存放数据,是空的结构,只有指针域和下一节点连接。当然你也可以放入数据,不会有错误,但和大部分人的编程习惯就会不一致。
3。这也是为了安全,人们形成的习惯,如你所写 scanf("%d",&new->score),容易产生错觉,所以使用非指针变量会更直观。真要使用最好写成: scanf("%d",&(new->score)).
所以有些地方,并不是不允许那样书写,而是那样书写,容易引起误会。
当数据量不能确定时,一般都会使用动态分配内存的方法。当然也可以预先估计一个值,定义数组也可以实现,但预先估计的值需要多大,大了,浪费资源,小了有不够用,怎样才能不多不少,当然最好是,有一个数据,给一块地方。对吧?你们使用new表示新指针不是一个好的习惯,容易产生二义性。可以换换比如使用pnew也比直接使用new要好。之所以说动态,就是用到再申请,所以程序中经常在使用前提出申请,然后分配,然后存放数据,然后接到链表中。一般都是如此。
2。现在一般头指针中不存放数据,是空的结构,只有指针域和下一节点连接。当然你也可以放入数据,不会有错误,但和大部分人的编程习惯就会不一致。
3。这也是为了安全,人们形成的习惯,如你所写 scanf("%d",&new->score),容易产生错觉,所以使用非指针变量会更直观。真要使用最好写成: scanf("%d",&(new->score)).
所以有些地方,并不是不允许那样书写,而是那样书写,容易引起误会。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询