输出参数用C

问题描述:

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

//////输出参数用C

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

在上述例子中,C编译器抱怨 “空隙交换(INT &第一,整数&秒)” 语法有错误。像以前一样“/ {(”失踪“&”

我不明白为什么不支持C此功能

+1

或者你可以第二^ = *先使用XOR交换:)'*先^ = *第二,*, *首先^ = *秒;' – 2012-02-04 21:04:46

+0

你介意使用#define吗?如果是,则交换(a,b)b^= a; a^= b; b^= a; – QuentinUK 2012-02-04 21:08:15

+10

XOR掉期等属于IOCCC,并非以实际的代码或作为初学者的建议。通过引用传递的 – 2012-02-04 21:16:42

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;  \ 
} 

C不支持通过引用传递;γ T帽子是C++的特色。您必须改用指针。

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

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

的整数交换,你可以使用这个方法没有一个局部变量:

int swap(int* a, int* b) 
{ 
    *a -= *b; 
    *b += *a; 
    *a = *b - *a; 
} 
+0

为避免'warning:控制到达非void函数的末尾'应该是'void swap(int * a,int * b)'(从不伤害检查if(* a!= * b)交换之前......) – 2017-05-30 05:06:08