#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的地址,看能否相等