引用的实质
是一个常指针
#include <iostream> #include <stdio.h> using namespace std; struct Teacher { bool sex; int age; }; void printa(Teacher *const p) { printf("printa = %p\n", p); cout << (*p).age << endl; //这里引用的实质上是C++编译器在主调用函数中,自动取了一个地址,传到该函数中来,然后再进行了*操作符. } void printb(Teacher &p) { printf("printa = %p\n", p); cout << p.age << endl; //这里的p实际上是*(&t1),这个t1是主调函数里的t1 //这里引用的实质上是C++编译器在主调用函数中,自动取了一个地址,传到该函数中来,然后再进行了*操作符. } int main() { Teacher t1; t1.age = 20; printf("main = %p\n", &t1); printa(&t1);; cin.get(); return 0; }
int& j()
{
static int a = 10;
a++;
return a;
}
C++编译器在这里所做的工作是,将a的地址返回,然后再做一个*操作符
int *j() { static int a = 10; a++; return &a; } int main11() { j(); j(); //int *p = j(); printf("%d\n", *(j())); //输出13 return 0; }
(不管是传参,还是函数返回,只要接受的是引用,那么实质上就是在接受之前,传递方取地址传送,
然后再在接受方*取地址内容的操作),这是C++编译器的行为