我听说在C语言中可以通过"按值传递"或"按引用传递"方式传递参数。但是在一本书中提到,我们可以通过这两种方式传递参数,但实际上没有"按引用传递",但我实际上大多数情况下都是通过"按引用传递"传递参数。
那么为什么会有人问:"C语言甚至有按引用传递吗?"
非常感谢您的详细说明。
我听说在C语言中可以通过"按值传递"或"按引用传递"方式传递参数。但是在一本书中提到,我们可以通过这两种方式传递参数,但实际上没有"按引用传递",但我实际上大多数情况下都是通过"按引用传递"传递参数。
那么为什么会有人问:"C语言甚至有按引用传递吗?"
非常感谢您的详细说明。
C参数总是按值传递而不是按引用传递。但是,如果您将对象的地址视为对该对象的引用,则可以通过按值传递该引用。例如:
void foo(int *x)
{
*x = 666;
}
在评论中你问道:
既然我们可以通过值传递来传递所有参数,为什么在C语言中我们还需要指针呢?
因为在一种只支持按值传递的语言中,缺少指针将是一种限制。这意味着你无法编写像这样的函数:
void swap(int *a, int *b)
{
int temp = *a;
*b = *a;
*a = temp;
}
在Java中,例如,无法编写该函数,因为它仅具有传值而没有指针。void swap(int &a, int &b)
{
int temp = a;
b = a;
a = temp;
}
同样地,在 C# 中:
void swap(ref int a, ref int b)
{
int temp = a;
b = a;
a = temp;
}
swap
,对吧? - David Heffernan