在C中无法使用引用传递,但可以使用指针作为替代方案。
是的,这是正确的。
再详细解释一下。无论你将什么作为参数传递给C函数,都只会以值传递的方式进行传递。无论是变量的值还是变量的地址。
区别在于你发送了什么。
当我们通过值传递时,我们将变量的值传递给函数。当我们通过引用传递时,我们将变量的别名传递给函数。C可以将指针传递到函数中,但这仍然是按值传递的。它复制指针的值(地址)到函数中。
例如,我们可以看一些C++代码,以了解按值调用和按引用调用之间的真正区别。取自这个网站。
#include <iostream>
using namespace std;
void swap(float &x, float &y);
int main()
{
float a, b;
cout << "Enter 2 numbers: " << endl;
cin >> a >> b;
if(a>b)
swap(a,b);
cout << "Sorted numbers: ";
cout << a << " " << b << endl;
return 0;
}
void swap(float &x, float &y)
{
float temp;
temp = x;
x = y;
y = temp;
}
在这个C++示例中,使用了
引用变量(在C中不存在)。引用
此网站的话说:
"引用是现有变量的别名或替代名称..."
并且
"引用的主要用途是作为函数形式参数以支持传递引用..."
这与将指针用作函数参数的用法不同,因为
"指针变量(或简称指针)基本上与其他变量相同,可以存储一段数据。与存储值(如int、double、char)的普通变量不同,指针存储一个内存地址。"
因此,当通过指针发送地址并接收时,实际上只发送了值,但当发送/接收引用变量时,实际上是发送了别名或引用。
**更新:2015年11月11日**
在C聊天室里有一场长时间的辩论,在阅读了评论和回答后,我意识到可能还有另一种看待这个问题的方式,另一个角度。
让我们来看一些简单的C代码:
int i;
int *p = &i;
*p = 123;
在这种情况下,可以使用术语 p的值是对i的引用。因此,如果是这种情况,那么如果我们将相同的指针 (int* p
) 发送到函数中,可以认为,由于将 i
的引用发送到了函数中,因此这可以称为按引用传递。
所以,这只是一种术语和看待场景的方式问题。
我不完全反对这个观点。但对于一个完全遵循书本和规则的人来说,这是错误的。
注意:更新受这个聊天启发。