2013-07-22 221 views
0

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

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

回答

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 */ 

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

+0

你能否详细说明一下真实传递参考的例子吗? – Kvass

+0

@Kvass例如,在C++中,可以使用'&'限定符声明引用类型。像这样:'void change(int&n){n = 1337; } - 然后(语法上)你不传递变量的地址,而是“变量本身”。不过,我不知道其他语言。 – 2013-07-22 17:58:45