鱼C论坛

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

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

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

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

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

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


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

回帖奖励 +2 鱼币

调用函数的时候不是给了e一个地址吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

void fun(int * e)
{
        * e %= 1000        ;
}

main(void)
{
    int e = 123456         ;
    fun(& e)               ;
    printf("e = %d\n" , e) ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

那就是说关键看调用的时候的用法咯,如果main函数里面没有给e赋值,而是int *e;fun(e);这样调用就会出错了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-3 12:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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