关于C语言结构体指针的一个疑问?

如图,我写了一个结构体指针,但是发现在main函数和print函数中输出的同一个结点的num数据却是不一样,main函数中输出的是正确的1,而print函数中却输出了地址... 如图,我写了一个结构体指针,但是发现在main函数和print函数中输出的同一个结点的num数据却是不一样,main函数中输出的是正确的1,而print函数中却输出了地址值。后来我在print函数中添加了第18行的代码后,输出结果竟然都变成1了,这是怎么回事呢?求解答,代码贴下面:#include <stdio.h>struct student{ int num; struct student *next;};struct student* create(){ struct student b={2,NULL}; struct student a={1,&b}; struct student *head=&a; return head;}void print(struct student *head){ printf("%d\n",head); printf("%d",head->num);}int main(void){ struct student *head=create(); printf("%d\n",head->num); //1 print(head);} 展开
 我来答
格里编程办公技巧
科技发烧友

2021-09-08 · 编程、办公知识分享与学习
格里编程办公技巧
采纳数:434 获赞数:878

向TA提问 私信TA
展开全部

出现此问题的原因在于链表创建create函数有问题,问题定位在图中红色框内。

此处每个节点使用的是局部变量,函数结束后,局部堆栈虽然内容不会清除,但内存会被回收,如果其它地方也使用堆栈可能会分给它用,内存内容就会改变。正确的方式是申请堆内存。使用malloc函数,同时包含头文件#include<stdlib.h>。

框内代码改成:

struct student *b = (struct student*)malloc(sizeof(struct student));

b->next = NULL;

b->num = 2;

struct student *a = (struct student*)malloc(sizeof(struct student));

a->next = b;

a->num = 1;

struct student *head=a;

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式