V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
brooky
V2EX  ›  问与答

怎么理解 C 语言中的值传递和址传递?

  •  
  •   brooky · 2016-06-11 19:41:24 +08:00 · 1990 次点击
    这是一个创建于 3087 天前的主题,其中的信息可能已经有所发展或是发生改变。

    怎么理解值传递和址传递? 完全蒙圈了,不要告诉我这是规定.

    11 条回复    2016-06-11 23:44:41 +08:00
    bazingaterry
        1
    bazingaterry  
       2016-06-11 19:58:54 +08:00
    就像小明要抄你的作业,值传递就是你给小明看,然后它按着抄了一份一模一样的;址传递就是你小明直接把你的拿去用了……
    lizhenda
        2
    lizhenda  
       2016-06-11 19:59:48 +08:00
    这有什么不好理解的呢?初学者吗,如果是的话还是先不去专牛角尖想,多写自然就会理解了。
    congeec
        3
    congeec  
       2016-06-11 20:01:31 +08:00   ❤️ 1
    既然提到了规定,你去看 specification 呀
    C 语言只能传值。地址是啥?指针是啥?不就是一数字么,一个记录数据地址的数字。比如:
    void free(void *ptr);
    这里面传过去的 ptr 就是一个 0x11223344 这样的值。
    starcraft
        4
    starcraft  
       2016-06-11 20:10:30 +08:00 via iPhone
    看编译器的实现代码啊 配合 gdb 包治各种初学者疑难杂症。
    gdtv
        5
    gdtv  
       2016-06-11 20:21:53 +08:00   ❤️ 1
    值传递就是把你的作业拿去复印一份,然后别人怎么用你的复印件对和无关对你无影响。
    地址传递就是别人直接把你的作业拿走了,别人可以只看看然后还给你,也可以改了你的作业再还给你。
    eamars
        6
    eamars  
       2016-06-11 20:27:12 +08:00
    rule of thumb:
    如果是函数的输入 parameter , int , float , char 这种自带类型,可以使用值传递和地址传递,对于 struct 这种,只能使用地址传递。这些都是效率决定的。

    如果是函数的输出 parameter ,只能使用地址传递。

    比如:

    typedef struct
    {
    int x; int y; int z;
    } Vector_t;

    void callback_function(int input_a, Vector_t *input_b, int *output_a, Vector_t *output_b)

    这样的
    acros
        7
    acros  
       2016-06-11 20:36:32 +08:00
    初学者还是要简单的方法去理解,说太底层了不太好吧。

    举个例子,你要查字典里面一个字的解释。
    值传递就是你把查到的内容重新抄写下来了。
    址传递是把查到的页面位置记下来,需要时再去这个已经记住的地方找。
    aheadlead
        8
    aheadlead  
       2016-06-11 20:58:47 +08:00 via iPad
    @starcraft 大哥给跪 读编译器代码指条路吧
    powergx
        9
    powergx  
       2016-06-11 21:03:46 +08:00 via iPhone
    上网用域名访问 vs 背 ip
    xuwenmang
        10
    xuwenmang  
       2016-06-11 21:05:39 +08:00
    你要学 C#可能混乱。

    有 4 个概念
    值类型、引用类型
    值参数、引用参数

    混合下各种效果有:
    值类型的值传递、
    值类型的引用传递
    引用类型的值传递
    引用类型的引用传递

    当时看的时候瞬间蒙逼。不过 C#有本初级好书叫 C#图解,两三页,几个图片,看完瞬间开朗。
    billlee
        11
    billlee  
       2016-06-11 23:44:41 +08:00
    去看微机原理
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1090 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 18:46 · PVG 02:46 · LAX 10:46 · JFK 13:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.