5、struct student * creat(void) 函数体中,临时指针*p1、*p2再函数返回之前应当设置为NULL,避免因为局部变量的作用域结束导致相关的空间被清除 。
总之,我建议把struct student * creat(void)定义修改为:
void creat(struct student **head).
以上内容经过调试,可以使用 。
==================我的程序,经过完整的调试
#include "stdafx.h"
#include "malloc.h"
#include "stdio.h"
#define NULL 0
#define LEN sizeof(struct student)
struct student
{
long num;
float score;
struct student *next;
};
int n;
void creat(struct student **head) /*定义函数,此函数带回一个指向链表头的指针*/
{
struct student *p1,*p2;
n=0;
do
{
p1=(struct student *)malloc(LEN); /*开辟一个新单元*/
p1-next=NULL;
scanf("%ld,%f",p1-num,p1-score);
if(p1-num==0)
break;
n++;
if(n==1)
*head=p1;
else
p2-next=p1;
p2=p1;
} while(p1-num!=0) ;
p1=NULL;
p2=NULL;
}
void main()
{
struct student *p;
creat(p);
if(p!=NULL)
do
{
printf("%ld %5.1f\n",p-num,p-score);
p=p-next;
}while(p!=NULL);
flushall(); //清除键盘缓冲区,避免输入混淆
getchar(); //等待键盘任意输入,以便观察运算结果
}
看我的回答怎么样?
C语言的函数与全局变量动态链表的问题这个可能是C语言函数的链表变量你在第一次执行操作C语言函数的链表变量的时候移动了指针C语言函数的链表变量,而用完后没有指向开始C语言函数的链表变量的位置 。只是可能,没有代码这个是说不清的 。一行都没有执行说时不满足执行的条件 。“链表的地址就莫名其妙的变化了 。一起变化的还有链表里的所有数据C语言函数的链表变量!”这个很可以就是你第一次用了指针没有指回该指的地方 。
PS:只是猜想 。
C语言链表函数 , 求解析 。答案:
①p0
②p1
③NULL
解析:
p0指向要插入的结点,p1指向要和p0结点的info进行比较的结点,如果找到应该插入的位置 , p0会被插入在p1之前 , 如果没找到,会被插入在p1之后 。
第一个if检查链表是否为空,如果为空,直接将p0变为首结点就完成了插入 。
while循环的作用是寻找插入位置,因为链表要求降序,所以用p1从首结点开始找 , 要找到第一个info小于等于p0结点的结点 。每次循环结束后 , p2将指向p1之前的结点,为后面的插入作准备 。
第二个if检查之前的while循环是否找到这样的结点 。如果没找到,说明前面从while循环出来时p1指向的是尾结点,这时要将p0插入到链表末尾,所以将p0插入到p1之后 。p0的后面没有结点,所以它的link指向NULL , 所以第③问填NULL 。如果找到了,那么进入第三个if 。
第三个if检查p1是否刚好为首结点,如果为首结点,说明前的while循环根本没进去直接就出来了,这时p1之前没有结点,p2还没有指向任何结点,所以还不能使用p2 。由于要将p0插入到p1之前,所以必须将p0变为首结点,所以第①问填p0 。
如果p1不是首结点,进行的就是常规的插入操作了,将p0插入到p1之前,p2之后 , 所以第②问填p1 。注意这里不能填p2-link,因为这里不在第三个if的else里面 , 第三个if出来以后也要经过这一步,而之前说了,如果进入了第三个if , p2是不能使用的 。
C语言函数的链表变量的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言链表库函数、C语言函数的链表变量的信息别忘了在本站进行查找喔 。
推荐阅读
- pdf书籍下载,pdf书籍下载软件充值
- php5.3redis扩展下载,php8 redis
- 超真实真人恋爱养成游戏,真人恋爱养成游戏哪个好玩
- go语言rpc是什么意思 golang grpc consul
- 怎么撤回删过的视频号,视频号怎么撤除掉?
- 证书查询网站制作,证书查询网站制作流程
- 抖音农产品苹果直播,抖音农产品苹果直播是真的吗
- go语言如何卸载 go语言下载
- sqlserver查询直接修改数据,sql server查询语句如何编辑