S1E45的单链表程序不懂
1.为什是**library,调用时addBook(&blirary)2.book 与 library还有*library是什么关系
26 void addBook(struct Book **library)//指向Book结构的指针的指针
27 {
28 struct Book *book;
29 struct Book *temp;//定义Book结构体类型的两个指针
30 book=(struct Book*)malloc(sizeof(struct Book));
31 if (book==NULL)
32 {
33 printf("内存分配失败了!\n");
34 exit(1);
35 }
36 getInput(book);
37 if (*library!=NULL)
38 {
39 temp=*library;
40 *library=book;
41 book->next=temp;
42
43 }
44 else //如果是空链表
45 {
46 *library=book;
47 book->next=NULL;
48 }
49 }
1. library是一个指针对吧,假设指向a,现在要指向b。那就需要改变指针的指向,就需要用到比现在指针高一级的去改变自身,那就是指针的指针,即二级指针。也就是**library,既然需要二级指针,那么调用的时候就需要对指针取地址才能变成二级指针。
2. book是一级指针。你说的这个library是指这个函数里的library吗?我就当是来和你说吧。就像前面说的,library是二级指针了(参数里已经说明),那么*library就是一级指针。*library=book;这个语句就可以将*library的一级指针指向新出来的book上,再让book的next指向以前已经有的Book,而library自身没变。
就是library操作*library指向了新的book1,book1自身的next指向了以前的book0,这样又可以将Book串起来了,都在library的手下。
指针等级上来说,library > *library = book 丶忘却的年少o 发表于 2018-11-9 13:16
1. library是一个指针对吧,假设指向a,现在要指向b。那就需要改变指针的指向,就需要用到比现在指针高一级 ...
不好意思我是才学的不太明白,请您赐教
78 int main(void)
{
struct Book *library=NULL;
1.比如说在调用函数之前,library指向a,在函数中要改变library的指向为什么不直接library =&b;是因为那个什么函数中什么副本吗?
2. 我现在主函数中调用 addBook(&blirary),那么 此时传入的参数 &library 就等于addBook函数中的 library 对吗? 所以(*blirary)就相当于主函数中的 library 对吗?
丶忘却的年少o 发表于 2018-11-9 13:16
1. library是一个指针对吧,假设指向a,现在要指向b。那就需要改变指针的指向,就需要用到比现在指针高一级 ...
https://www.cnblogs.com/tianlangshu/p/5385195.html
这个就是说指针用作传出参数时需要二级指针 洛城闻笛 发表于 2018-11-9 16:14
https://www.cnblogs.com/tianlangshu/p/5385195.html
这个就是说指针用作传出参数时需要二级指针
你的理解是对的,但是只是在同一个函数的时候,就不需要用二级指针。
换个等效的简单题来和你说下,看下面的代码,为什么只有 b 的值能改变?
因为传参的时候必须要是高一级的指针才能改变自身的值。好了回到你的问题,为什么传给 add 这个函数的时候一定要二级指针?以为他要改变一级指针的指向,如果传同级别的一级指针,回到main函数后又变成main函数调用add前的状态了!
void fun1(int *num)
{
(*num)++;
}
void fun(int num)
{
num++;
}
int main()
{
int a = 0, b = 0; // 我要让值都为1
fun(a); // 这里我只是传同级别的a
fun1(&b); // 这里我传高级别的&b,也就是指针
printf("a:%d,b:%d", a, b); // 只有b = 1
return 0;
} 丶忘却的年少o 发表于 2018-11-10 12:35
你的理解是对的,但是只是在同一个函数的时候,就不需要用二级指针。
换个等效的简单题来和你说下,看下 ...
谢谢您的解释我懂了,我看了一个贴子就是说我们传过去的参数他会生成一个副本,返回主函数是参数还是不变的,所以我们的改变那个地址里面的值,就需要二级指针了。
还有一个问题需要请教一下,在什么情况下,我们需要传入二级指针,或者说是比这参数高一级的指针,是在需要改变这个参数本身的值的时候吗? 洛城闻笛 发表于 2018-11-10 14:10
谢谢您的解释我懂了,我看了一个贴子就是说我们传过去的参数他会生成一个副本,返回主函数是参数还是不变 ...
你已经说出了答案,当一个参数要去别的函数,返回的时候需要让他改变,那么我们就传高级指针;
如果没用,只是说传过去方便那个函数的运算或者说明操作,那只要传等价的就好了,反正回来还是自己 丶忘却的年少o 发表于 2018-11-10 15:07
你已经说出了答案,当一个参数要去别的函数,返回的时候需要让他改变,那么我们就传高级指针;
如果没用 ...
嗯嗯,好的谢谢你了,以后要问题我再来请教你,不吝赐教 洛城闻笛 发表于 2018-11-11 12:23
嗯嗯,好的谢谢你了,以后要问题我再来请教你,不吝赐教
OK,不过我不一定常在,我记得上次活跃还在去年{:10_266:} 丶忘却的年少o 发表于 2018-11-12 09:29
OK,不过我不一定常在,我记得上次活跃还在去年
那大神留个qq吧
页:
[1]