二-从C到C++

本章会介绍一些C++拓展的非面向对象的功能
  1. 引用

1 概念

引用从一定程度上讲是指针的平替,几乎被所有的面向对象语言所使用。引用相当于对某一目标变量起“别名”。

操作这个别名,与操作原变量一样。(操作同一块地址)不能有相同别名

#include <iostream>

using namespace std;

int main()
{
       
    int a = 1;
    // b是a的引用
    int &= a;
   
    cout << a << " " << &<< endl; // 1 0x61fe88
    cout << b << " " << &<< endl; // 1 0x61fe88
    return 0;
}

2 引用的性质

1)可以改变引用的值,但是不能再次成为其他变量的引用

#include <iostream>

using namespace std;

int main()
{
       
    int a = 1;
    // b是a的引用
    int &= a;
    int c = 3;

    b = c; // 只是单纯的赋值,不是引用,b还是a的引用

    cout << a << " " << &<< endl; // 1 0x61fe88
    cout << b << " " << &<< endl; // 1 0x61fe88
    cout << c << " " << &<< endl; // 1 0x61fe88
    return 0;
}

2)声明引用时,必须要初始化

#include <iostream>

using namespace std;

int main()
{
       
    int a = 1;

//    int &b; // 错误 引用必须要初始化

    cout << a << " " << &<< endl; // 1 0x61fe88
    // cout << b << " " << &b << endl; // 1 0x61fe88
    return 0;
}

3)声明引用的时候,不能初始化为null

#include <iostream>

using namespace std;

int main()
{
       
    int a = 1;

//    int &b = NULL; // 错误,引用不能初始化为NULL

    cout << a << " " << &<< endl; // 1 0x61fe88
    // cout << b << " " << &b << endl; // 1 0x61fe88
    return 0;
}

4)声明引用的时候,初始化的值可以是纯数值,但是此时需要使用const关键字修饰引用,表示该引用为常量引用,这样的引用的值不能改变。

#include <iostream>

using namespace std;

int main()
{
       
    int a = 1;

    const int &= 444;
    // b = 2; // 错误 常量引用的数值不能被改变

    cout << a << " " << &<< endl; // 1 0x61fe88
    cout << b << " " << &<< endl; // 1 0x61fe88
    return 0;
}

5)可以将变量引用的地址赋值给一个指针,此时指针指向的还是原来的变量。

#include <iostream>

using namespace std;

int main()
{
       
    int a = 1;
    int &= a;
    int *= &b;//指针c

    cout << a << " " << &<< endl; // 1 0x61fe88
    cout << b << " " << &<< endl; // 1 0x61fe88
    cout << *<< " " << c << endl; // 1 0x61fe84
    return 0;
}

6)可以使用const修饰引用,此时如果原变量的值改变,引用的值也改变

#include <iostream>

using namespace std;

int main()
{
       
    int a = 1;
    const int &= a;
//    b++; // 错误,b是只读的
    a++;

    cout << a << " " << &<< endl; // 2 0x61fe88
    cout << b << " " << &<< endl; // 2 0x61fe88
    return 0;
}

【思考】

写一个函数,函数有两个参数a和b,函数的功能是交换两个传入的参数【原来变量】的值。

#include <iostream>

using namespace std;
//c语言普通模式
void type1(int *a,int *b)
{
       
    int c;
    c=*a;
    *a=*b;
    *b=c;
}
//c语言异或
void type2(int *a,int *b)
{
       
    *a=*a^*b;
    *b=*a^*b;
    *a=*a^*b;
}
//不会产生副本
void type3(int &x,int &y)
{
       
    x=x^y;
    y=x^y;
    x=x^y;

}
int main()
{
       
    int a = 1;
    int b = 5;

    cout <<"a=" << a  << " " << &<< endl;
    cout <<"b=" << b << " " << &<< endl;
//    type1(&a,&b);//c语言普通模式
//    type2(&a,&b);//c语言异或
    type3(a,b);//不会产生副本
    cout<<"----------------------"<<endl;
    cout <<"a=" << a  << " " << &<< endl;
    cout <<"b=" << b << " " << &<< endl;
    return 0;
}


引用作为参数进行定义的时候,在参数传递时,是不会产生副本的,这样会提高运行效率,我们在正常编程当中,建议使用引用进行传递参数。

引用形参,在不参与计算的情况下,我们建议使用const进行修饰。以达到引用的安全性。

相关推荐

  1. 【系统学C++】C语言C++(

    2023-12-31 03:08:02       10 阅读
  2. CC++1

    2023-12-31 03:08:02       36 阅读
  3. c++复习-基础-cc++

    2023-12-31 03:08:02       33 阅读
  4. cc++——6:auto

    2023-12-31 03:08:02       33 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-31 03:08:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-31 03:08:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-31 03:08:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-31 03:08:02       18 阅读

热门阅读

  1. DAY1C++

    DAY1C++

    2023-12-31 03:08:02      34 阅读
  2. js普通ajax数据请求和axios请求数据代码及总结

    2023-12-31 03:08:02       36 阅读
  3. 57.0/初识 PhotoShopCS4(详细版)

    2023-12-31 03:08:02       36 阅读
  4. LeetCode682. Baseball Game

    2023-12-31 03:08:02       27 阅读
  5. FPGA LCD1602驱动代码 (已验证)

    2023-12-31 03:08:02       37 阅读
  6. C++知识点总结(11):质因子分解

    2023-12-31 03:08:02       21 阅读
  7. K-means 聚类算法

    2023-12-31 03:08:02       37 阅读
  8. K8S学习指南(48)-k8s的pod驱逐

    2023-12-31 03:08:02       32 阅读
  9. php伪类型

    2023-12-31 03:08:02       39 阅读
  10. 我的学习C#回炉学习日志——Lua热更新06_模块

    2023-12-31 03:08:02       31 阅读
  11. wefew

    2023-12-31 03:08:02       32 阅读
  12. C语言中数组和指针的sizeof和strlen详解

    2023-12-31 03:08:02       37 阅读
  13. 音视频技术:连接感官的奇妙纽带

    2023-12-31 03:08:02       37 阅读
  14. 【QT】qt中多线程的使用

    2023-12-31 03:08:02       38 阅读