交换整数的代码在 C++ 中有效,但在 C 中无效

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 中不起作用?

for*_*818 8

C 和 C++ 有一些重叠,但它们是两种不同的语言。C 没有引用。

甚至声称 C++ 是 C 的超集的说法也已过时。自从 C++ 开始成为“带有类的 C”以来,C 就一直在发展,并不是所有添加到 C 中的特性都被合并到了 C++ 中。因此,在一个中起作用的方法在另一个中不一定起作用,这应该不足为奇。

  • 即使 C++ *是* C 的真正超集,这并不意味着代码应该工作:超集的全部要点是它包含子集中未包含的元素(此处:引用)。 (6认同)

ana*_*ciu 7

这是两种不同的语言,您不能指望在一种语言中起作用的东西可以在另一种中起作用,在 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)