菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
369
0

C++入门--引用

原创
05/13 14:22
阅读数 57783

引用 : 
引用不是新定义一个变量 , 而是给已存在的变量取一个别名 , 编译器不会为引用变量开辟空间 , 它和它引用的变量共用同一块内存空间 .

类型& 引用变量名(对象名)=引用实体

      特性 :

1 . 引用在定义时必须初始化 ;

2 . 一个变量可以有多个引用 ;

3 . 引用一旦引用一个实体 , 再不能引用其他实体 .

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

using namespace std;

//定义一个结构体
struct A{
    int a;
    int b;
    int c;
    int d;
    int e;
};

void test(){
    int a = 10;
    //ra是一个引用 : 是a的别名 , 指向和a相同的实体
    int& ra = a; 

    A sa;
    sa.a = 1;
    sa.b = 1;
    sa.c = 1;
    sa.d = 1;
    sa.e = 1;
    //引用: 不分配空间, 改rsa相当于改sa;
    A& rsa = sa;
    //拷贝: 分配新的空间,不改变sa
    A copy = sa;

    copy.a = 100;
    cout << sa.a << endl;
    rsa.a = 5;
    cout << sa.a << endl;
}


int main(){
    test();
    system("pause");
    return 0;
}

 

引用也可以实现两个变量内容的交换 , 之前我们只能使用指针来进行 , 现在可以使用引用 , 引用比指针更好理解 , 也更简单 .

//两个变量内容交换(指针)
void Swap(int* a, int* b){
    int tmp = *a;
    *a = *b;
    *b = tmp;
}

//两个变量内容交换(引用)
void Swap(int& a, int& b){
    int tmp = a;
    a = b;
    b = tmp;
}

 

引用做返回值时 , 返回值的生命周期需要大于函数的生命周期

 

常引用:

   引用指向的实体不能修改

void test(){
    //const 类型&
    const int a = 10;
    /*a是常量,不能被引用*/
    int& ra = a;/* (错误代码)*/
    //使用常引用引用常量
    const int& ra = a;

    /*100是常量,不能被引用*/
    int& ra2 = 100;/* (错误代码)*/
    //使用常引用引用常量
    const int& ra2 = 100;
}

 

引用和指针的不同点 : 

1 . 引用概念上定义一个变量的别名 , 指针存储一个变量的地址 ;

2 . 引用在定义时必须初始化 , 指针没有要求 ;

3 . 引用在初始化时引用一个实体后 , 就不能再引用其他实体,而指针可以在任何时候指向任何一个同类型实体 ; 

4 . 没有NULL引用 , 但有NULL指针 ; 

5 . 有多级指针 , 但没有多级引用 ;

6 . 访问实体方式不同 : 指针需要显示解引用 , 引用编译器自己处理 ;  

7 . 在sizeof中含义不同 : 引用结果为引用类型的大小 , 但指针始终是地址空间所占字节个数 ;

8 . 引用自加是给引用的实体增加1 , 指针自加是指针向后偏移一个类型大小 ;

9 . 引用比指针使用起来相对更安全

 

发表评论

0/200
369 点赞
0 评论
收藏
为你推荐 换一批