dutingyu 发表于 2020-11-6 01:06:16

关于指向指针的指针

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

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

void printLibrary(struct Book *library){
         struct Book *book;
         int count = 1;
         book=library;
         while(book!=NULL){
                  printf("-----------Book%d-----------\n",count);
                  printf("书名:%s\n",book->title);
                  printf("作者:%s\n",book->author);
                  book=book->next;
                  count++;
         }
}
void releseLibrary(struct Book *library){
         struct Book *temp;
         while(library!=NULL){
                  temp=library->next;
                  free(library);
                  library=temp;   
         }
}
int main(){
         struct Book *library=NULL;
         int ch;
         while(1){
                  do{
                        printf("是否录入书籍信息(Y/N):");
                        ch=getchar();
                  } while(ch!='Y'&&ch!='N');
                  if(ch=='Y')
                  {
                        addBook(&library);
                  }
                  else
                  {
                        break ;
                  }
         }
         do{         
                  printf("是否打印书籍信息(Y/N):");
                  ch=getchar();
         } while(ch!='Y'&&ch!='N');
         if(ch=='Y')
         {
                  printLibrary(library);
         }
         releseLibrary(library);
         return 0;
}

chxchxkkk 发表于 2020-11-6 09:37:06

if(*library!=NULL){                                    //那么*library不就是取值的意思吗?library取值不就是下一个节点地址上的值了吗。按照小甲鱼老师所讲,这里目的应该是修改头节点的内容呀
*library取的是头节点的地址,不是地址上的值。因为传入的是二级指针**library.
页: [1]
查看完整版本: 关于指向指针的指针