【问题标题】:Does C have references?C有参考吗?
【发布时间】:2010-11-29 16:19:19
【问题描述】:

C 有引用吗?即在 C++ 中:

void foo(int &i)

【问题讨论】:

    标签: c reference


    【解决方案1】:

    不,它没有。它有指针,但它们并不完全相同。

    特别是,C 中的所有参数都按值传递,而不是像 C++ 中那样通过引用传递。当然,您可以通过指针模拟传递引用:

    void foo(int *x)
    {
        *x = 10;
    }
    
    ...
    
    int y = 0;
    foo(&y); // Pass the pointer by value
    // The value of y is now 10
    

    有关指针和引用之间差异的更多详细信息,请参阅this SO question。 (请不要问我,因为我不是 C 或 C++ 程序员 :)

    【讨论】:

    • @Martin:不会太久;)
    • @Martin,也有同样的想法
    • 我知道你很优秀。皇帝还没有完全把它从你身边赶走。 [走到通道的一边,远离维德]这就是你不能摧毁我的原因。这就是为什么你现在不会带我去见你的皇帝。
    【解决方案2】:

    从概念上讲,C 有引用,因为指针引用其他对象。

    从句法上讲,C 不像 C++ 那样具有引用。

    【讨论】:

    • 错误,概念上的指针和引用是完全不同的。指针是 null 和引用的代数数据类型。参考就是这样,参考。这意味着类型安全——它可以立即看出一个函数是否意味着获取一个空参数。
    • @sbi 好吧,您可能会说空指针引用了位于内存地址0 的对象,尽管这意味着标准对空指针只字未提——我不知道这是否属实。在任何情况下,有一种广泛建立的做法是使用空值来专门表示“指针不引用任何东西”,直到我怀疑是否存在使用 null 来实际引用空地址的代码,也许如果利用. IOW 即使标准不以任何特殊方式处理空指针,在概念上空指针也不会引用任何内容。
    • @Hi-Angel:所以指针是可以为空的引用。 耸耸肩。这不会阻止指针,一般来说,被引用。
    • @Hi-Angel:你刚才说 引用不是引用吗?那么long腿不是腿吗? 地毯不是地毯吗? Snort。 您似乎被 C++ 中“引用”的句法定义所困,看不到它背后的概念。 手。
    • @sbi 我用你的术语来避免混淆。由于某种原因,它没有成功。我的术语是“null 和 reference 的代数数据类型”(或较少使用但我个人偏好“null 和 reference 的 coproduct”),你不能替换 null → long 和参考 → 腿,仍然得到一些明智的东西。
    猜你喜欢
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多