shatanzongcai 发表于 2020-7-2 19:45:42

P45单链表1中为什么temp不需要malloc分配空间

打扰各位朋友,我在自己打单链表的时候有一个疑惑void addBook(BOOK** head){

    BOOK* new_book = (BOOK*)malloc(sizeof(BOOK));
    BOOK* temp;
    if (new_book == NULL){
      printf("分配内存失败了!");
      exit(1);

    }
    getInfo(new_book);

    if (*head == NULL){
      *head = new_book;
      new_book->next = NULL;

    }
    else{
      temp = *head;
      *head = new_book;
      new_book->next = temp;


    }

    }
以上是我仿照小甲鱼的代码写的添加书本的代码,我不理解的地方是为什么这里的temp不需要分配内存。是因为temp是一个指针,然后它可以随意指向其他有内存的同类型数据吗?我没有给temp分配内存,temp在被定义的时候有自己的地址吗?还是说temp = *head 这句语句之后temp才有了自己的地址——也就是和*head一样的地址呢?

qiuyouzhi 发表于 2020-7-2 19:48:48

因为它不需要存放一个结构体,它只需要指向一个结构体。

shatanzongcai 发表于 2020-7-2 20:08:50

qiuyouzhi 发表于 2020-7-2 19:48
因为它不需要存放一个结构体,它只需要指向一个结构体。

因为我和小甲鱼写的一样,传入的参数,void addBook(BOOK** head),其实是指针地址,所以*head是一个BOOK类型的指针。temp也是一个BOOK类型指针,一个指针赋值给另一个指针是可以的吗?这是不是意味着这两个指针的地址是一样的呢?

405794672 发表于 2020-7-2 21:21:58

shatanzongcai 发表于 2020-7-2 20:08
因为我和小甲鱼写的一样,传入的参数,void addBook(BOOK** head),其实是指针地址,所以*head是一个BOOK ...

指针里存的也是数据,只不过你要把它当地址来用。指针自己也有个地址,那只有CPU知道。变量也是的,只有CPU,我们要想知道,只好定义一个指针给它求出来。或者直接&求出来。我们只需写上变量名,CPU知道这个变量在哪。我们一定义变量,就会分配内存。当然是编译后的。这个变量已经确定会出现,程序会预先留出空间存它的值。但是,你使用动态的malloc去申请,那只是一条指令,并没有分配,CPU运行这条指令,才会分配。然而空间没有了,只能在其它地方分一个。所以要申请。也就是说,这是运行中,用户决定要不要出现这个变量,用户要用,它才会分配。这和一开始就有的不同。我们一开始就定义了,有空间它用。

shatanzongcai 发表于 2020-7-2 22:10:50

405794672 发表于 2020-7-2 21:21
指针里存的也是数据,只不过你要把它当地址来用。指针自己也有个地址,那只有CPU知道。变量也是的,只有C ...

并不是我们一定义变量就会分配内存的吧?指针变量也是变量呀,但是单纯定义指针应该是不会被分配内存的吧?你的回答我没有太看明白,但是我想知道的是temp = *head的意义是什么

qiuyouzhi 发表于 2020-7-3 07:52:31

shatanzongcai 发表于 2020-7-2 22:10
并不是我们一定义变量就会分配内存的吧?指针变量也是变量呀,但是单纯定义指针应该是不会被分配内存的吧 ...

会被分配的,因为它是一个指针变量。
temp = *head就是把temp指向head,而不是用temp存储head。

405794672 发表于 2020-7-3 09:09:31

shatanzongcai 发表于 2020-7-2 22:10
并不是我们一定义变量就会分配内存的吧?指针变量也是变量呀,但是单纯定义指针应该是不会被分配内存的吧 ...

定义必定分配内存,没有内存存它,你上哪儿找它去?指针变量也是变量,也要用内存存它的。给它赋值的话,就把它所在的内存写一个地址进去,这个地址也是用数字记录的。然后根据它去找内存。

shatanzongcai 发表于 2020-7-5 00:12:51

qiuyouzhi 发表于 2020-7-3 07:52
会被分配的,因为它是一个指针变量。
temp = *head就是把temp指向head,而不是用temp存储head。

把temp指向head是什么意思呢,是说temp也和head一样指向同一个内存地址吗

shatanzongcai 发表于 2020-7-5 00:13:22

405794672 发表于 2020-7-3 09:09
定义必定分配内存,没有内存存它,你上哪儿找它去?指针变量也是变量,也要用内存存它的。给它赋值的话, ...

好的,这一点我明白了

qiuyouzhi 发表于 2020-7-5 08:15:11

shatanzongcai 发表于 2020-7-5 00:12
把temp指向head是什么意思呢,是说temp也和head一样指向同一个内存地址吗

我想是的。

shatanzongcai 发表于 2020-7-5 18:05:32

qiuyouzhi 发表于 2020-7-5 08:15
我想是的。

好的,感谢
页: [1]
查看完整版本: P45单链表1中为什么temp不需要malloc分配空间