C++指针与引用

我们都知道形参和实参的区别,形参所在的函数为函数定义,实参为调用中的参数:

int Add(int a,int b){
    int c = a + b;
    return c;
}

int main(){
    print("%d\n",Add(1,2));
    //int c = Add(1,2);
}

上述的Add函数为传值形式,传值就会存在一个问题,即生命周期的问题,一般创建的局部变量出了作用域生命周期也就结束了,即c出了Add函数就会因为构成函数的栈帧的消失而消失,但是这个功能却能正常执行这时为什么呢?这时因为在Add函数即将结束的时候,main()函数内部创建了一个临时拷贝,拷贝了c的返回值,不然的话怎么改变实参的值呢?这样就出现一个问题,即产生了内存的消耗,创建了空间。

 

这时候就会有人说了使用指针啊,指针不会针对变量进行专门的拷贝啊,但是指针存在问题就是,指针的创建也会耗费内存空间,指针还需要对其存储的地址进行解引用才能返回一个数值。

 

这时候C++就引入了引用这个概念;引用只需在定义的时候进行初始化就行,不用操心内存开辟的问题,因为引用指向了被引用的对象自身没有创建空间,而且引用访问实体时候,是编译器自己处理的;指针需要显示解引用

 

但是引用和指针还是存在如下区别:

引用需要定义的时候初始化,而指针不需要

引用在引用一个实体之后,不能再引用其它实体了,而指针不存在这样的问题

没有NULL引用,而有NULL指针

再sizeof中含义不同,引用结果为引用类型的大小,指针始终是机器本身的地址空间所占字节个数

有多级指针,没有多级引用

引用自+1为实体值+1,而指针为偏移

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值