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
因为它不需要存放一个结构体,它只需要指向一个结构体。
因为我和小甲鱼写的一样,传入的参数,void addBook(BOOK** head),其实是指针地址,所以*head是一个BOOK类型的指针。temp也是一个BOOK类型指针,一个指针赋值给另一个指针是可以的吗?这是不是意味着这两个指针的地址是一样的呢? shatanzongcai 发表于 2020-7-2 20:08
因为我和小甲鱼写的一样,传入的参数,void addBook(BOOK** head),其实是指针地址,所以*head是一个BOOK ...
指针里存的也是数据,只不过你要把它当地址来用。指针自己也有个地址,那只有CPU知道。变量也是的,只有CPU,我们要想知道,只好定义一个指针给它求出来。或者直接&求出来。我们只需写上变量名,CPU知道这个变量在哪。我们一定义变量,就会分配内存。当然是编译后的。这个变量已经确定会出现,程序会预先留出空间存它的值。但是,你使用动态的malloc去申请,那只是一条指令,并没有分配,CPU运行这条指令,才会分配。然而空间没有了,只能在其它地方分一个。所以要申请。也就是说,这是运行中,用户决定要不要出现这个变量,用户要用,它才会分配。这和一开始就有的不同。我们一开始就定义了,有空间它用。 405794672 发表于 2020-7-2 21:21
指针里存的也是数据,只不过你要把它当地址来用。指针自己也有个地址,那只有CPU知道。变量也是的,只有C ...
并不是我们一定义变量就会分配内存的吧?指针变量也是变量呀,但是单纯定义指针应该是不会被分配内存的吧?你的回答我没有太看明白,但是我想知道的是temp = *head的意义是什么 shatanzongcai 发表于 2020-7-2 22:10
并不是我们一定义变量就会分配内存的吧?指针变量也是变量呀,但是单纯定义指针应该是不会被分配内存的吧 ...
会被分配的,因为它是一个指针变量。
temp = *head就是把temp指向head,而不是用temp存储head。 shatanzongcai 发表于 2020-7-2 22:10
并不是我们一定义变量就会分配内存的吧?指针变量也是变量呀,但是单纯定义指针应该是不会被分配内存的吧 ...
定义必定分配内存,没有内存存它,你上哪儿找它去?指针变量也是变量,也要用内存存它的。给它赋值的话,就把它所在的内存写一个地址进去,这个地址也是用数字记录的。然后根据它去找内存。 qiuyouzhi 发表于 2020-7-3 07:52
会被分配的,因为它是一个指针变量。
temp = *head就是把temp指向head,而不是用temp存储head。
把temp指向head是什么意思呢,是说temp也和head一样指向同一个内存地址吗 405794672 发表于 2020-7-3 09:09
定义必定分配内存,没有内存存它,你上哪儿找它去?指针变量也是变量,也要用内存存它的。给它赋值的话, ...
好的,这一点我明白了 shatanzongcai 发表于 2020-7-5 00:12
把temp指向head是什么意思呢,是说temp也和head一样指向同一个内存地址吗
我想是的。 qiuyouzhi 发表于 2020-7-5 08:15
我想是的。
好的,感谢
页:
[1]