【问题标题】:Parameters by reference to a C function引用 C 函数的参数
【发布时间】:2012-08-07 11:40:05
【问题描述】:

我想在 C 中通过引用传递一个值。这两个函数是否相同?有什么区别?在 C++ 中也一样吗?

void foo1(int * val1, int * val2)

void foo2(int &val1, int &val2)

谢谢,

【问题讨论】:

标签: c++ c pointers reference parameters


【解决方案1】:

引用仅是 C++(不是 C)。

方法的实现会有所不同,因为在 C++ 中解引用引用不同于解引用指针。

例如

ref.method();

对比

ptr->method();

在这两种情况下,您调用的是传递给方法的原始对象,而不是副本。

【讨论】:

    【解决方案2】:

    第二个不是C,只有C++。通过引用传递在 C 中是通过传递值的地址来模拟的。

    【讨论】:

      【解决方案3】:

      在 C 中你不能做 foo2,因为没有像 C++ 中那样的引用运算符。 在 C++ 中,它们也不相同。引用不能为 NULL,并且它们是常量。初始化后它们不能指向另一个位置。

      【讨论】:

        【解决方案4】:

        void foo1(int * val1, int * val2) 相当于 void foo2(int &val1, int &val2) 在 C 中。在这两种情况下,函数都需要地址。

        第二个用于 C++。这可以用来传递任何变量的引用。

        例如,如果您有像 int num1 = 10, num2 = 20; 这样的变量。

        那么foo2(&num1 , &num2 ) 在 C++ 中需要 foo2,但这在 C 中不起作用。

        【讨论】:

          【解决方案5】:

          在 C 中,没有引用传递。相反,您可以将地址传递给指针,这实际上允许更改传递的变量的值。

          第二个函数是用 C++ 编写的。

          这两个函数具有不同的签名,尽管它们允许一个执行相同的任务。

          【讨论】:

            猜你喜欢
            • 2015-08-01
            • 1970-01-01
            • 2012-04-11
            • 1970-01-01
            • 2011-09-12
            • 1970-01-01
            • 1970-01-01
            • 2012-02-25
            • 1970-01-01
            相关资源
            最近更新 更多