引用的实质

是一个常指针

#include <iostream>
#include <stdio.h>

using namespace std;

struct Teacher 
{
    bool sex;
    int age;

};

void printa(Teacher *const p)
{
    printf("printa = %p
", p);
    cout << (*p).age << endl;
    //这里引用的实质上是C++编译器在主调用函数中,自动取了一个地址,传到该函数中来,然后再进行了*操作符.
}

void printb(Teacher &p)
{
    printf("printa = %p
", p);
    cout << p.age << endl; //这里的p实际上是*(&t1),这个t1是主调函数里的t1
    //这里引用的实质上是C++编译器在主调用函数中,自动取了一个地址,传到该函数中来,然后再进行了*操作符.
}
int main()
{
    Teacher t1;
    t1.age = 20;

    printf("main = %p
", &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
", *(j())); //输出13
	return 0;
}

  

 

 (不管是传参,还是函数返回,只要接受的是引用,那么实质上就是在接受之前,传递方取地址传送,

然后再在接受方*取地址内容的操作),这是C++编译器的行为

原文地址:https://www.cnblogs.com/c-slmax/p/5178713.html