int& bb=*b;这一句,使用参数b指向的对象去初始化bb的引用,也就是bb实际上是main中的b,也就是实参b,你可以在main里面加一句输出&b看看多少。
再回到add函数中,本来b就是实参的地址,也就是说&bb 和 b应该是一样的,结果有一句b=&c;把b的值修改了,所以肯定不相等。看你提供的图监视区,b和&c是一样的,就是这句的结果。
bb是个int的引用,所以&bb是个int*(图上显示的int** 有误),而&b是int**,所以两者不相等是正常的。
综上,&bb和&b原本就不相等。而&bb和b本来相等,但被用户改掉了。
另外,形参和实参的名字一样,容易误解,换个名字就豁然开朗了 。
我这边的编译器得到的结果是&bb和b一样
你用的编译器是什么
int& bb = *b; b已经是指针了,这里*b是取指针所指值的意思,应该改为int& bb = b;