brooky
V2EX  ›  问与答

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

  •  
  •   brooky · Jun 11, 2016 · 2880 views
    This topic created in 3797 days ago, the information mentioned may be changed or developed.

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

    11 replies  •  2016-06-11 23:44:41 +08:00
    bazingaterry
    bazingaterry
    Jun 11, 2016
    1
    就像小明要抄你的作业,值传递就是你给小明看,然后它按着抄了一份一模一样的;址传递就是你小明直接把你的拿去用了……
    lizhenda
    lizhenda
    Jun 11, 2016
    2
    这有什么不好理解的呢?初学者吗,如果是的话还是先不去专牛角尖想,多写自然就会理解了。
    congeec
    congeec
    Jun 11, 2016❤️1
    3
    既然提到了规定,你去看 specification 呀
    C 语言只能传值。地址是啥?指针是啥?不就是一数字么,一个记录数据地址的数字。比如:
    void free(void *ptr);
    这里面传过去的 ptr 就是一个 0x11223344 这样的值。
    starcraft
    starcraft
    Jun 11, 2016 via iPhone
    4
    看编译器的实现代码啊 配合 gdb 包治各种初学者疑难杂症。
    gdtv
    gdtv
    Jun 11, 2016❤️1
    5
    值传递就是把你的作业拿去复印一份,然后别人怎么用你的复印件对和无关对你无影响。
    地址传递就是别人直接把你的作业拿走了,别人可以只看看然后还给你,也可以改了你的作业再还给你。
    eamars
    eamars
    Jun 11, 2016
    6
    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
    acros
    Jun 11, 2016
    7
    初学者还是要简单的方法去理解,说太底层了不太好吧。

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

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

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

    当时看的时候瞬间蒙逼。不过 C#有本初级好书叫 C#图解,两三页,几个图片,看完瞬间开朗。
    billlee
    billlee
    Jun 11, 2016
    11
    去看微机原理
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4919 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 07:56 · PVG 15:56 · LAX 23:56 · JFK 02:56
    ♥ Do have faith in what you're doing.