0

所以我刚读完这篇文章,意识到 Java 实际上完全是按值传递的。在其中一个答案中,它指出某些语言是通过引用传递的,但 C 和 Java 不是。由于我主要熟悉 C 和 Java,并且不熟悉列为支持按引用传递的语言的语言,我想我可能从未见过按引用传递。我的问题是,在 C 中将指向对象的指针作为参数传递,然后修改指向对象的指针所指向的内容是否本质上是通过引用实现的。

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

4

1 回答 1

0

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

但是,您正确地假设可以使用指针模拟通过引用传递。即,如果您有一个类型为 的对象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 */

这就是为什么引用类型在某些语言中经常使用指针来实现,但在概念上(通常在语法和一些语义细节上)它们是不同的。

于 2013-07-22T17:16:00.817 回答