13
void swap(int &first, int &second){
    int temp = first;
    first = second;
    second = temp;
}
int a=3,b=2;
swap(a,b);

编译器抱怨void swap(int &first, int &second)有语法错误。为什么?C不支持引用吗?

4

3 回答 3

21

C 不支持引用传递;这是一个 C++ 特性。您必须改为传递指针。

void swap(int *first, int *second){
    int temp = *first;
    *first = *second;
    *second = temp;
}

int a=3,b=2;
swap(&a,&b);
于 2012-02-04T21:03:56.740 回答
19

C 不支持通过引用传递。因此,您将需要使用指针来完成您想要实现的目标:

void swap(int *first, int *second){
    int temp = *first;
    *first = *second;
    *second = temp;
}


int a=3,b=2;
swap(&a,&b);

建议这样做:但为了完整起见,我会添加它。

如果您的参数没有副作用,您可以使用宏。

#define swap(a,b){   \
    int _temp = (a); \
    (a) = _b;        \
    (b) = _temp;     \
}
于 2012-02-04T21:04:41.167 回答
-3

对于整数交换,您可以在没有局部变量的情况下使用此方法:

int swap(int* a, int* b)
{
    *a -= *b;  
    *b += *a;  
    *a = *b - *a; 
}
于 2014-05-14T21:29:21.113 回答