C语言 结构体 求大神求解 为啥执行end->next->num 无法执行呢

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 结构体 求大神求解 为啥执行end->next->num 无法执行呢相关的知识,希望对你有一定的参考价值。

#include <stdio.h>
#include<stdlib.h>
#define NULL 0
#define LEN sizeof(struct stu)
struct stu
int num;
int age;
struct stu *next;
;
struct stu *creat(int n)
struct stu *he,*pf,*pb;
int i;
for(i=0;i<n;i++)
pb=(struct stu *)malloc(LEN);
printf("input Number and age\n");
scanf("%d%d",&pb->num,&pb->age);
if(i==0)
pf=pb;
he=pb;

else
pf->next=pb;
pb->next=NULL;
pf=pb;


return(pf);

void main()

stu *end;
end=creat(3);
printf("%d",end->next->num);

为什么return(he)可以
追问一下 这个题目为什么*he的next没有做什么操作它可以指向pb呢
想了一天了 没懂

不太清楚你的代码具体想做什么,不过一般无论return(pf)还是return(he)编译器应该都会报错的,因为he跟pf只是在if语句满足的情况下有初始化,即如果if(i==0)一直不成立,就等于使用了未初始化的指针,所以编译器会因为可能使用未初始化的指针而报错的。
其次else语句中的pf=pb;也是有问题的,因为执行了这一句pf就等于pb,也就是end等于pb;

end->next->num等于pb->next->num;由于pb->next=NULL;所以要从一个空指针输出一个数是不行的。

想要程序可以执行的话,可以在struct stu *he,*pf,*pb;下面添加pf = (struct stu*)malloc(LEN);
并且把pf=pb;语句删除。
参考技术A end都已经指向链表的最后一个元素了, end->next = NULL 参考技术B 你的意思是说he是指向头结点么?追问

对 he为什么指向了头指针 为什么返回pb 执行end->next->num就不行 而返回he,执行end->next->num就可以

追答

if(i==0)
pf=pb;
he=pb;

原因在这里,第一次执行的时候给he赋了值,并且后面没有改变它,pb每次执行while会被改。pb=(struct stu *)malloc(LEN);

我是C语言新手。求大神解释一下这一道题,书里没解析的额

有一程序:
#include<stdio.h>
main()
struct cmplxint x;int y;cnum[2]=1,3,2,7;
printf("%d\n",cnum[0].y/cnum[0].x*cnum[1].x);

运行结果是6。
求解析!!

首先main函数里定义个结构体类型 struct cmplx该结构体包含两个成员变量x和y。
cnum是结构体类型的数组,数组中有2个数组元素cnum[0]和cnum[1],每个数组元素都是结构体类型的变量。所以
cnum[0].x=1,cnum[0].y=3;
cnum[1].x=2,cnum[1].y=7;
则cnum[0].y/cnum[0].x*cnum[1].x的值是3/1*2=6追问

哦!原来如此,我还在纳闷怎么一个只有两个元素的数组有四个元素呢

参考技术A struct cmplx

    int x;
    int y;
cnum[2]=1,3,2,7;   //定义一个结构体,并同时定义一个该结构体类型的数组cnum, 初始化为:cnum[0].x=1   cnum[0].y=3   cnum[1].x=2   cnum[1].y=7

追问

简单明了

参考技术B 3/1*2=6
cnum[0].x=1
cnum[0].y=3
cnum[1].x=2
参考技术C 谁这么无聊写的这么烂的程序先将p指针使用一个for循环指向字符串末尾然后又将字符从末尾往前打印出来所以这个东西就是说反向打印字符串追问

你走错地方了吧......

以上是关于C语言 结构体 求大神求解 为啥执行end->next->num 无法执行呢的主要内容,如果未能解决你的问题,请参考以下文章

我是C语言新手。求大神解释一下这一道题,书里没解析的额

C语言实验题 求大神指点

C++ socket传送和接收结构体问题,求大神帮忙

求!1+!2+!3+!4+!5 注:!5=1*2*3*4*5; 求用C语言编出来 我学到循环结构 求解 最好写些注释让我容易懂

求c语言大神 题目:编写查找函数search(),实现如下功能。

c语言//为啥这个结构体类型不匹配?