C++ 指针与引用

一、引用

1.1、什么是引用?

C++新增了一种复合类型–引用变量。引用是已定义变量的别名,使用引用变量的主要的用途是作为函数的参数。通过将引用变量用作参数,通过形参就可以对原始的数据进行修改。这样除指针之外,引用也为函数处理class与struct提供了一种非常方便的途径。C++新增的这种特性也是对C语言的超越,C语言只能按值传递,如果直接传递对象会调用类的拷贝构造函数。

1.2、声明引用变量

C与C++使用&来获取变量的地址。C++给&赋予了另外一个含义,将其用来声明引用,例如:

class Student{
public:
    int age;
    Student() {
        age = 100;
    }
};

void Display(Student &r) {
    cout << r.age << endl;
}

int main()
{
    Student obj;
    Display(obj);

    return 0;
}

引用非常适合用于结构与类,C++中引入引用的主要目的是为了这些类型的,而不是基本的内置类型。

1.3、引用用作函数参数

将类对象传递给函数时,C++的通常的做法是使用引用。使用引用作为函数参数可以节省时间与内存,因为,如果直接传递对象,会调用类的拷贝构造函数,当形参的声明周期结束时,还会调用对应的析构函数

二、指针与引用比较

2.1、指针与引用概念的不同

指针:

它是存放地址的一个变量,在逻辑上它是独立的。指针是可以被改变的,包括其所包含的地址的改变和其指向的内存中保存的数据的改变。

引用:

是地址的别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须一开始就被初始化,而且引用不能改变,自始至终只能依附于一个变量。

2.2、传指针与传引用的区别

传指针:

传址的本质是传值,被调函数的形参作为被调函数的局部变量处理,形参保存实参传递进来的值。

传引用:

引用是变量的别名,传引用的原理还是传指针,传引用的时候实际上是拷贝了实参的地址,被调函数对形参进行修改时,主调函数传进来的变量也会发生变化。

三、指针与引用的相同点与不同点

3.1、相同点

两者都是地址的概念,指针变量拥有自己的内存,可以在指针变量中保存另外一块内存空间的地址;而引用是某块内存的别名。

3.2、不同点

  • 指针是一个实体,引用是地址的别名。
  • 如果定义一个引用,在定义时一定要进行初始化,不然编译时会出错,而且引用在初始化之后不能改变;但是指针变量中保存的地址可以发生改变。
  • 引用不能为空,但是指针可以为空。
  • 使用"sizeof 引用"得到的是引用对象的大小;而使用"sizeof 指针"得到的是指针变量的大小。
  • 指针有指针常量与常量指针,引用只有常引用没有引用常量。

四、常指针与指针常量

指针(*)与常量(const)谁在前先读谁,例如:

int main(){
    int a = 10;
    int b = 20;
    int const *p1 = &a;      //const在前,定义为常指针
    int * const p2 = &b;     //*在前,定义为指针常量
    return 0;
}

常指针:

指针指向的是常量,不能通过指针改变指向的变量的值,但是指针保存的地址可以改变。

指针常量:

指针是常量,不能改变指针保存的地址,但是可以改变指针指向的变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值