• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
指尖上的快乐
博客园    首页    新随笔    联系   管理    订阅  订阅

引用的实质

是一个常指针

#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++编译器的行为

posted @ 2016-02-02 23:02  指尖上的快乐  阅读(278)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3