由于我们总是使用指针来定义变量,我想知道Objective-C是否是“按值传递”,因为像Java一样,实际值将通过使用其引用来传递。
然而,由于它似乎是建立在C语言之上的,它是否具有C语言的所有功能呢?
由于我们总是使用指针来定义变量,我想知道Objective-C是否是“按值传递”,因为像Java一样,实际值将通过使用其引用来传递。
然而,由于它似乎是建立在C语言之上的,它是否具有C语言的所有功能呢?
C语言不支持按引用传递参数,而Objective-C作为C的严格超集也不支持。
在C(和Objective-C)中,您可以通过传递指针来模拟按引用传递参数,但重要的是要记住,您仍然在技术上传递一个值,该值恰好是指针的值。
因此,在Objective-C(以及C)中,没有其他语言(如C++或Java)中所述的引用概念。
这可能会让人感到困惑,因此让我尝试更清晰地解释一下(我将使用纯C,但 - 再次强调 - 在Objective-C中也是一样的)
void increment(int *x) {
*x++;
}
int i = 42;
increment(&i); // <--- this is NOT pass-by-reference.
// we're passing the value of a pointer to i
void increment(int &x) {
x++;
}
int i = 41;
increment(i); // <--- this IS pass-by-reference
// doesn't compile in C (nor in Objective-C)
somefunction(&var);
时,变量 var 是通过引用传递的。 - Merlevedevar
值的指针。这就像执行void *p = &var; somefunction(p);
一样。 - Gabriele Petronella
&
来模拟按引用传递,但这只是模拟而已。 - Hot Licks