77问答网
所有问题
C语言中链表中的结构体指针变量问题。。。求教
用C编链表时, 声明结构体指针变量的时候,难道没有为其分配内存吗? 还要另外用malloc函数为其分配内存。。 这内面到底是个什么样的过程,请高手讲解讲解。。。
所说指针是想加上一个链节时定义的指针
举报该问题
推荐答案 推荐于2016-10-04
定义结构体指针变量时,只分配存储指针类型需要的空间,比如ListNode *p;这里p有给他分配存储指针的4个字节的空间。
实际上你是要让p指向一个结构体空间的,这个结构体空间在哪?
可以先定义ListNode a;
然后 p=&a;
这时p指向一个之前申请分配过空间(编译器设定过其地址和大小,在栈空间存放着了)。
现在我们要让p指向一个临时决定分配的空间(我们需要用来存储输入信息或计算信息),并让p指向他,使得之后我们随时通过p来访问他。于是使用malloc先分配内存,并把malloc返回的地址赋值给p。在这里,我们不能使用定义临时结构体变量并让p之前他(就如上面所说的p=&a),因为在子函数定义的变量,他们都是分配在子函数被调用时为其创建的栈空间,子函数退出时这些空间被释放回收,我们定义的变量生命结束,他们所在地址会被其他子函数被调用时创建栈空间所重用,那些地址很可能被新函数使用并修改所存数据。这是我们不敢想象的,为了数据安全,必须使用malloc分配内存,因为malloc分配的内存是在堆空间分配,只有使用free后,其内存才会释放,才能被其他地方重新分配。
温馨提示:答案为网友推荐,仅供参考
当前网址:
http://77.wendadaohang.com/zd/8Y8pGvv88.html
其他回答
第1个回答 2011-09-27
指针声明的时候只是开辟了一个存放地址的内存,不管你这个指针是指向对象的还是char还是别的类型,指针声明开辟的空间是一样的,因为对于指针来说它存的只是地址,至于地址里面的是char还是long对于声明指针的内存是没有关系的,所以如果指针要装东西,需要malloc一个内存来存放char或者long型的东西
第2个回答 2011-09-27
声明结构体指针变量的时候,难道没有为其分配内存吗?
A:没有,需要malloc
这和普通的指针分配没有区别。
typedef struct stu
{
int id;
char *str;
} stu_t;
void main()
{
stu_t * p;
p = (stu_t *) malloc(sizeof(stu_t));
if(p)
p->str = (char *)malloc(VALUE);
...
}
第3个回答 2016-01-10
在3kw的电炉盘上装上5kw的炉丝可以吗
相似回答
链表结构体指针问题
答:
在Initlist
里面的
形参L并不是实参L1。这是2个不同
的指针变量
,但是他们都指向同一块内存。所以在Initlist函数里对L指向的内存(既是*L)进行修改,执行完毕退出该函数后(*L1)也就变化了。这就是指针的魅力。如果参数类型不是指针,那么Initlist里面malloc分配的内存就没有被释放的地方啦。L就是指针...
C语言
链表
指针问题
答:
你可以在
结构里
定义2个
链表指针
,分别是正向和反向,这样你输入的的时候,就直接得到正反两个链表了。我写了案例,你参考吧。include <stdio.h>#include <malloc.h>#define size 5//你想输入
的链表
个数typedef
struct
stt{ char num; struct stt *next0;//正向链表指针 struct stt *nex...
C语言结构体指针变量问题
答:
p,q只能指向单一的
结构体变量
或是指向结构体数组的一个元素,而不是指向“结构体数组”,因为若*p指向的是一个结构体元素,则*(p+1)指向的一定是紧邻的下一个结构体元素,而不是“下一个结构体数组”。
关于
c语言链表
创建动态单向链表时为什么需要
结构体指针
p1和p2 一个...
答:
其次,新的节点生成,会通过new或malloc来申请空间,其返回值是个指针,这时一般要用
指针变量
p2来接收这个指针,然后将链表尾节点的next赋值成这个p2的内容,p2指向的next再赋值成NULL成为尾节点。最后,如果需要在
链表中
插入,就需要一个指针p1指向当前节点,另一个p2指向当前节点之后的节点,然后将p1的...
求教
:
c语言中
关于
结构体的问题
答:
){ int retvalue;//定义
指针
指向第一个结 Node *
c
= head.next;if(c == &foot) return -1;//将头指针指向第一个结点之后的结点(作为新的第一个结点)head.next = c->next;//返回当前第一个结点 retvalue = c->a;//将当前第一个结点从
链表中
删除 free(c);return retvalue;} ...
麻烦问一个
C语言链表的
题目
问题
答:
“." 运算符要求左边是一个常规的结构体量(对象),例如以你题
中的结构体
类型为例,则声明语句“struct list a;”,a就是一个常规的结构体
变量
。访问它的成员则“a.data”和“a.next”。"->" 运算符要求左边是一个指向结构体量
的指针
,声明语句”struct list *p;“,p就是一个指向结构体...
C语言中
,创建
链表
时,为什么head指针也是
结构体
型
的指针变量
?head中不...
答:
之所以使用链表头head,目的是为了操作链表方便。head是一个特殊的结点(不是
指针
),其数据域不使用,尤其在双向
链表中
,head必须是一个结点,而不能是指针。
大家正在搜
c语言链表指向下一个结构体指针
结构体变量和结构体指针
结构体嵌套结构体指针
指向指针的指针变量
C语言链表结构体
结构体链表指针
如何使用结构体指针来建立链表
结构体指针变量
结构体和链表的区别
相关问题
C语言的结构体指针和链表问题
链表中结构体指针的问题
C语言 单链表 结构体指针 赋值想等 说明什么?
问下c语言链表的问题 前面结构体里定义的指针和函数里定义的结...
问个C语言结构体中的结构体指针问题,求大家回答。
关于C语言结构体指针的问题,求大神回答....
C语言 数据结构 结构体指针变量“无法读取内存”
c语言链表中的结构体,为什么没有定义结构体变量,却可以直接用...