鱼C论坛

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

关于单链表的一个简单问题

[复制链接]
发表于 2019-3-17 11:16:00 | 显示全部楼层 |阅读模式

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

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

x
  1. #define datatype int
  2. int GetElement(Linknode *h,int i,datatype *e)
  3. {
  4.     Linelist p;
  5.     p = h->next;
  6.         int j;
  7.         for(j=1;j<i&&p;j++)
  8.                 p=p->next;
  9.         if (!p)
  10.                 return 0;
  11.         *e = p->data;
  12.         return 1;
  13. }
复制代码
数据结构与算法P10中讲数据元素的获取,上面是视频中小甲鱼老师的代码
对于这段代码,我的疑问是:没有给e 这个指针赋值,就直接给它所指的地方的内容赋值,这样不就相当于int *a,*a =9 这种类型吗 ,而a并不知道指向哪里,会报错。所以这个地方我不太清楚。求解答!


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-3-17 12:01:28 From FishC Mobile | 显示全部楼层

回帖奖励 +2 鱼币

调用函数的时候不是给了e一个地址吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-17 12:06:00 | 显示全部楼层
本帖最后由 jackz007 于 2019-3-17 13:50 编辑

    e 是 int * 的类型,也就是整型数指针,是通过调用 GetElement() 的时候传入的,用指针做参数可以向函数双向传递数据。考察以下代码可以帮助理解:
  1. #include <stdio.h>

  2. void fun(int * e)
  3. {
  4.         * e %= 1000        ;
  5. }

  6. main(void)
  7. {
  8.     int e = 123456         ;
  9.     fun(& e)               ;
  10.     printf("e = %d\n" , e) ;
  11. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-17 17:44:27 | 显示全部楼层
jackz007 发表于 2019-3-17 12:06
e 是 int * 的类型,也就是整型数指针,是通过调用 GetElement() 的时候传入的,用指针做参数可以向函 ...

那就是说关键看调用的时候的用法咯,如果main函数里面没有给e赋值,而是int *e;fun(e);这样调用就会出错了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-17 17:49:41 | 显示全部楼层
大魔王S 发表于 2019-3-17 17:44
那就是说关键看调用的时候的用法咯,如果main函数里面没有给e赋值,而是int *e;fun(e);这样调用就会出错 ...

      不会,只要在主函数中定义了 e,赋不赋值都一样,关键是这个变量必须得先存在。你也可以用我的实例代码测试一下,把 main() 中对 e 的赋值去掉,改由 fun() 赋值,看看是不是可以。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-2 11:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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