zoukankan      html  css  js  c++  java
  • 引用的实质

    是一个常指针

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

  • 相关阅读:
    redis的两种安装方法
    http头部信息
    软件测试技术知识
    github使用
    3 python之基础概要
    2 Python之编程语言介绍及变量
    1 Python入门及计算机硬件知识
    Linux常用命令
    CMDB小练习
    CMDB和运维自动化
  • 原文地址:https://www.cnblogs.com/c-slmax/p/5178713.html
Copyright © 2011-2022 走看看