输出参数用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此功能
答
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
或者你可以第二^ = *先使用XOR交换:)'*先^ = *第二,*, *首先^ = *秒;' – 2012-02-04 21:04:46
你介意使用#define吗?如果是,则交换(a,b)b^= a; a^= b; b^= a; – QuentinUK 2012-02-04 21:08:15
XOR掉期等属于IOCCC,并非以实际的代码或作为初学者的建议。通过引用传递的 – 2012-02-04 21:16:42