Ash*_*oss 1 c c++ swap pass-by-reference
我有这个交换通过引用传递的整数的函数,它在 C++ 中工作正常,但在 C 中不起作用。
#include <stdio.h>
void swap(int & x, int & y)
{
int z = x;
x = y;
y = z;
}
int main()
{
int a = 0, b = 1;
swap(a, b);
printf("a is now %d\n", a);
printf("b is now %d\n", b);
}
Run Code Online (Sandbox Code Playgroud)
为什么它在 C 中不起作用?
C 和 C++ 有一些重叠,但它们是两种不同的语言。C 没有引用。
甚至声称 C++ 是 C 的超集的说法也已过时。自从 C++ 开始成为“带有类的 C”以来,C 就一直在发展,并不是所有添加到 C 中的特性都被合并到了 C++ 中。因此,在一个中起作用的方法在另一个中不一定起作用,这应该不足为奇。
这是两种不同的语言,您不能指望在一种语言中起作用的东西可以在另一种中起作用,在 C 中无法通过引用传递。
但是,您可以通过指针传递:
#include <stdio.h>
void swap(int* const x, int* const y)
{
int z = *x;
*x = *y;
*y = z;
}
int main()
{
int a = 0, b = 1;
swap(&a, &b);
printf("a is now %d\n", a);
printf("b is now %d\n", b);
}
Run Code Online (Sandbox Code Playgroud)