求帮助~

C++语言 码拜 9年前 (2016-04-07) 1009次浏览
#include<iostream>
using namespace std;
void exchange(int * x,int &y);
void main()
{
	int a(2),b=6;
	cout<<"a="<<a<<","<<"b="<<b<<endl;
	exchange(&a,b);
	cout<<"a="<<a<<","<<"b="<<b<<endl;
}
void exchange(int *x,int &y)
{
	int temp = *x;
	*x = y;
	y = temp;
}

输出结果是

a=2,b=6
a=6,b=2
a=6 本人可以理解 但是本人不太明白为什么b=2.。请教!

解决方案

40

原因是你使用的是引用传参。
你在exchange函数内对y的任何操作都等同于对main函数里的b进行操作

20

引用与指针相似,均为按引用会买经,可以直接修改到实参
假如void exchange(int *x,int &y)改成void exchange(int *x,int y),那么b 的值就不会变化了

10

仅供参考:

#include <stdio.h>
#define SWAP(a,b) do ((&(a))!=(&(b)))?((a)^=(b)^=(a)^=(b)):((a)=(a)); while (0)
char   *p1="1" ,*p2="2" ;
char    c1=1   , c2=2   ;
short   s1=1   , s2=2   ;
int     i1=1   , i2=2   ;
__int64 I1=1i64, I2=2i64;
float   f1=1.0f, f2=2.0f;
double  d1=1.0 , d2=2.0 ;
void main() {
    SWAP((int)p1,(int)p2);                printf("char *     %5s,   %5s\n",p1,p2);
    SWAP(c1,c2);                          printf("char       %5d,   %5d\n",c1,c2);
    SWAP(s1,s2);                          printf("short      %5d,   %5d\n",s1,s2);
    SWAP(i1,i2);                          printf("int        %5d,   %5d\n",i1,i2);
    SWAP(I1,I2);                          printf("__int64 %5I64d,%5I64d\n",I1,I2);
    SWAP(*(int     *)&f1,*(int     *)&f2);printf("float      %5g,   %5g\n",f1,f2);
    SWAP(*(__int64 *)&d1,*(__int64 *)&d2);printf("double    %5lg,  %5lg\n",d1,d2);
    SWAP(c1,c1);
    printf("%d\n",c1);
}
//char *         2,       1
//char           2,       1
//short          2,       1
//int            2,       1
//__int64     2,    1
//float          2,       1
//double        2,      1
//2

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明求帮助~
喜欢 (0)
[1034331897@qq.com]
分享 (0)