int a = 5;
int *b = &a;
int &c = a;
通过观察反汇编可以看到,“b”和“c”中存放的都是变量“a”的地址。
但是打印“&b”和“&c”的值,分别输出的是“b”和“a”的地址。
void add1(int *x, int *y)
{
*x = *x + *y;
}
void main()
{
int a = 3, b = 4;
add1(&a, &b); //结果过为 a = 7;
}
void add2(int &x, int &y)
{
x = x + y;
}
void main()
{
int a = 3, b = 4;
add2(a, b); //结果过为 a = 7;
}
两者分别是利用指针和引用的写法,而在编译后,这两者的汇编代码是一样的。
对编译器而言,“add2”的两个形参“int &x”和“int &y”其实就是两个int型变量的地址,和“add1”中形参一样。
只是应用的写法更便于理解。