鱼C论坛

 找回密码
 立即注册
查看: 1601|回复: 1

关于指向指针的指针

[复制链接]
发表于 2020-11-6 01:06:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 dutingyu 于 2020-11-6 01:28 编辑

看《带你学c带你飞》视频,学到链表把我绕晕了,希望大神帮我解解惑,我的问题在下面代码的注释里,不太明白*library的含义,谢谢大家了
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. struct Book {
  4.          char title[128];
  5.          char author[40];
  6.          struct Book *next;
  7. };
  8. void getInput(struct Book *book){
  9.          printf("请输入书名:");
  10.          scanf("%s",book->title);
  11.          printf("请输入作者:");
  12.          scanf("%s",book->author);
  13. }
  14. void addBook(struct Book **library){                         //这里**library将头节点指针传递进来
  15.          struct Book *book,*temp;
  16.          book=(struct Book *)malloc(sizeof(struct Book));
  17.          if(book==NULL){
  18.                   printf("内存分配失败!\n");
  19.                   exit(1);//需要stdlib.h
  20.          }
  21.          getInput(book);
  22.          if(*library!=NULL){                                      //那么*library不就是取值的意思吗?library取值不就是下一个节点地址上的值了吗。按照小甲鱼老师所讲,这里目的应该是修改头节点的内容呀
  23.                   temp=*library                                    
  24.                   *library=book                                    //还是说*library是指向指针的指针这个形参的书写形式啊
  25.                   book->next=temp;
  26.          }
  27.          else{
  28.                   *library=book;
  29.                   book->next=NULL;
  30.          }
  31. }

  32. void printLibrary(struct Book *library){
  33.          struct Book *book;
  34.          int count = 1;
  35.          book=library;
  36.          while(book!=NULL){
  37.                   printf("-----------Book%d-----------\n",count);
  38.                   printf("书名:%s\n",book->title);
  39.                   printf("作者:%s\n",book->author);
  40.                   book=book->next;
  41.                   count++;
  42.          }
  43. }
  44. void releseLibrary(struct Book *library){
  45.          struct Book *temp;
  46.          while(library!=NULL){
  47.                   temp=library->next;
  48.                   free(library);
  49.                   library=temp;   
  50.          }
  51. }
  52. int main(){
  53.          struct Book *library=NULL;
  54.          int ch;
  55.          while(1){
  56.                   do{
  57.                           printf("是否录入书籍信息(Y/N):");
  58.                           ch=getchar();
  59.                   } while(ch!='Y'&&ch!='N');
  60.                   if(ch=='Y')
  61.                   {
  62.                           addBook(&library);
  63.                   }
  64.                   else
  65.                   {
  66.                           break ;
  67.                   }
  68.          }
  69.          do{           
  70.                   printf("是否打印书籍信息(Y/N):");
  71.                   ch=getchar();
  72.          } while(ch!='Y'&&ch!='N');
  73.          if(ch=='Y')
  74.          {
  75.                   printLibrary(library);
  76.          }
  77.          releseLibrary(library);
  78.          return 0;
  79. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-11-6 09:37:06 | 显示全部楼层
if(*library!=NULL){                                      //那么*library不就是取值的意思吗?library取值不就是下一个节点地址上的值了吗。按照小甲鱼老师所讲,这里目的应该是修改头节点的内容呀
*library取的是头节点的地址,不是地址上的值。因为传入的是二级指针**library.
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-10 02:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表