鱼C论坛

 找回密码
 立即注册
查看: 2388|回复: 4

[技术交流] 为什么创建单链表要传头结点的地址而不是传头结点!

[复制链接]
发表于 2021-7-19 22:35:34 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 Max472 于 2022-5-30 23:00 编辑
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. typedef struct node {
  4.         int data;
  5.         struct node* next;
  6. } node;

  7. typedef node* LinkList;

  8. void f(LinkList* L);

  9. void F(LinkList L);

  10. int main(void)
  11. {
  12.         node p;

  13.         LinkList L = &p;

  14.         printf(" main 中 &L = %p, L = %p, p = %p\n", &L, L, &p);

  15.         f(&L);

  16.         F(L);

  17.         return 0;
  18. }



  19. void f(LinkList* L)
  20. {
  21.         printf(" f 中 *L = %p, L = %p, &L = %p\n", *L, L, &L);
  22. }

  23. void F(LinkList L)
  24. {
  25.         printf(" F 中 L = %p, &L = %p\n", L, &L);
  26. }
复制代码



这里是运行结果:(由于等级不够,不能上传图片,我把结果复制了一下 )
         main 中 &L = 0117FD30, L = 0117FD3C, p = 0117FD3C
         f 中 *L = 0117FD3C, L = 0117FD30, &L = 0117FC5C
        F 中 L = 0117FD3C, &L = 0117FC5C

注:这些内存地址在不同电脑上都是不一样的,在一台电脑上多次运行的结果每次也都是不一样的。


f 函数传的是指针的地址,F 函数传的是指针


C语言的函数是传值,当你传指针的时候,其实是 重新创建了一个和你传的指针 指向相同的指针,这俩是 两个指针,就是他俩指向同一块地址,你在函数里边修改指针的指向 其实修改的是 这个函数里边新创建的指针的指向,原指针的指向还是 原来的地方没有变,如果你想改变原指针的指向,就要给函数传 指针的地址,虽然也是传值,但这个值是指针的地址,你可以通过对这个地址进行解引用(也就是 *head)来操纵指针从而改变它的指向。

而传指针仅仅是传的 这个指针指向的那块区域的地址,你只能对那块区域 做一些改变,而无法改变你传入的指针。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-8-2 21:19:41 | 显示全部楼层
头结点的地址才是存放你第一个结点的值
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-2 21:21:01 | 显示全部楼层
这样吧,head存放的是first_node的地址,然后你用这个链表做其他操作的时候,只需要将head的值传过去,然后就可以找到第一个结点,做其他操作了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-2 22:31:02 | 显示全部楼层
我是小白别骗我 发表于 2021-8-2 21:19
头结点的地址才是存放你第一个结点的值

单链表有很多种写法,你说的这种是头结点存的就是第一个有数据的结点的地址,也可以为头结点malloc一块结构体空间,让他的next是第一个有数据的结点
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-3 13:47:29 | 显示全部楼层
Max472 发表于 2021-8-2 22:31
单链表有很多种写法,你说的这种是头结点存的就是第一个有数据的结点的地址,也可以为头结点malloc一块结 ...

可以的,head->指向第一个结点
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-27 05:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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