#include<bits/stdc++.h>
using namespace std;
int &Max(int &a,int &b)
{
return a>b?a:b;
}
int main()
{
ios::sync_with_stdio(false);
int a,b;
a=2,b=1;
int c=Max(a,b);
c=0;
cout<<&a<<endl;
cout<<&c<<endl;
cout<<&Max(a,b)<<endl;
return 0;
}
上面代码输出的地址第第一个和第三个相同
#include<bits/stdc++.h>
using namespace std;
int &Max(int &a,int &b)
{
return a>b?a:b;
}
int main()
{
ios::sync_with_stdio(false);
int a,b;
a=2,b=1;
int &c=Max(a,b);
c=0;
cout<<&a<<endl;
cout<<&c<<endl;
cout<<&Max(a,b)<<endl;
return 0;
}
当把c改成引用时,输出的地址第一个和第二个相同。和第三个不同,是怎么回事呢?
解决方案
10
#include<bits/stdc++.h>
using namespace std;
int &Max(int &a,int &b)
{
return a>b?a:b;
}
int main()
{
ios::sync_with_stdio(false);
int a,b;
a=2,b=1;
int &c=Max(a,b); // 这里 Max 返回a,c 是 a 的引用
c=0; // c 是 a 的引用,所以这句之后, a == c == 0 。
cout<<&a<<endl;
cout<<&c<<endl;
cout<<&Max(a,b)<<endl; // a == 0, b == 1, 这时 Max 返回的 b 而不是 a
return 0;
}
当把c改成引用时,输出的地址第一个和第二个相同。和第三个不同,是怎么回事呢?
20
c=0; 这句使得a也变成了0
所以Max返回的结果是b的地址
题主可测试b的地址,看能否相等
所以Max返回的结果是b的地址
题主可测试b的地址,看能否相等