使用指针指针实现C中的引用传递?

时间:2013-07-22 17:08:06

标签: pass-by-reference

所以我刚读完this post并意识到Java实际上是完全按值传递的。在其中一个答案中,它指出一些语言是通过引用传递的,但C和Java则不是。由于我大多熟悉C和Java,并且不熟悉支持通过引用传递的语言,我想我可能从未见过通过引用传递。我的问题是,是否将指向对象的指针作为C中的参数传递,然后修改指向该对象的指针实际上是实现了传递引用。

示例: 如果我有一个指针bar并希望“通过引用传递它”,那么我可以更改它指向的对象,我可以传递一个指向bar的指针,我们可以调用它foofoo将按值传递给函数,但我们可以将值bar更改为该函数内的值。从酒吧的角度来看,这基本上是通过参考传递的吗?或者以不同方式通过参考工作?

1 个答案:

答案 0 :(得分:0)

通过引用传递不仅与传递值不同。它也不同于“通过指针”,i。即按值传递指向对象的指针。

但是,您正确地假设可以使用指针模拟通过引用传递。也就是说,如果您有一个T类型的对象,并且您将类型为T *的指针作为指向该对象的函数参数传递,则该函数可以修改该对象。像这样:

void change(int *n)
{
    *n = 1337;
}

int i = 42;
printf("Before: %d\n", i); /* prints 42 */
change(&i);
printf("After: %d\n", i);  /* prints 1337 */

这就是为什么引用类型通常使用某些语言中的指针实现的原因,但从概念上(通常在语法上和在某些语义上也是如此)它们是不同的。