c语言定义一个结构体指针变量跟定义该指针变量之后再调用malloc为其分配内存之后有什么不同? 150

例如:structstudent*p1和structstudent*p2;p2=(structstudent*)malloc(sizeof(structstudent))... 例如:
struct student *p1 和 struct student *p2; p2=(struct student *)malloc(sizeof(struct student));
这里的p1和p2只是为了区别两种情况而命名的,原本的问题是因为看到有的关于链表的基本操作代码中给出了在链表中可以定义一个 没有采用malloc分配内存的指针变量p1,去访问链表中的结点,实现p1->next等操作,不太理解一个指针变量用malloc分配了内存和不用malloc的区别所在
展开
 我来答
White_MouseYBZ
推荐于2018-03-27 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6630万
展开全部
你的“分配内存”的概念有点问题——不是用malloc为某个指针分配了内存,而是先用malloc分配了内存,再将这个块内存的首地址赋给一个类型匹配的指针,把首地址赋给一个指针的目的是为了操作这一块内存,否则分配在什么地方你就不知道了,就无法操作和释放这一块内存了。根据上述解释,那么再声明另一个类型匹配的指针,通过已有的指针关系就可以访问前面由malloc申请的内存空间了。这就像int *p,a;p=&a;int *q;q=p;,结果p和q就都指向了a,*p是a,*q也是a;(*p)++;能使a增1,(*q)++;同样能使a增1;这有什么不妥?你可以把a比作由malloc分配的内存,并用p=&a把地址赋给了p;而q是与a毫无关系的类型与p一样的指针,只要一句q=p;不就把q与a也联系起来了吗?供参考。
百度网友8ce788f
2015-11-24 · TA获得超过687个赞
知道小有建树答主
回答量:850
采纳率:80%
帮助的人:208万
展开全部
其本质实是没有区别的。都是这种类型的指针。
唯一的区别在于。p1不指向任何地址。p2指向了某段有效的内存。
链表中,定义一个指针,是为了让其记录下首地址,遍历完成后,head依然是head,不然的话,你用head去遍历,到最后 你就只剩下一个节点了 。 防止内存泄漏。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式