C++引用与指针问题以及效率

问题

今天刷leetcode的时候做到一道构造二叉树类型的题,发现算法写的没问题但是执行的返回总是为空,函数没有改变我传入的指针参数。原因是我传入的指针,并不是通过这个指针去修改其指向的内容,而是修改了这个指针的指向!然而我的参数传入方式是传值,因此传入的其实是指针的副本,而后函数中改变了这个副本的指向,但是最后退出函数的时候,调用函数中的指针其实是没有改变的。因此只能对指针也进行引用传递:

TreeNode *&root

引用

引用是在C++中引入的,原始的C是只能通过传地址来实现的; 我们通常的参数传入都是传值方法,是被调用函数使用调用程序值的拷贝
引用其实是对变量创建一个别名:

int rats;
int & rodents = rats //将rodents作为rats的别名

要注意区别引用&和地址运算符&!
引用和指针的区别我认为和Linux中硬链接和软链接的区别很类似,而且引用和指针的一个重要区别是,声明引用的时候必须将其初始化,而指针不需要!

在上面问题中讨论到的,若是指针的传值传入,则是拷贝了原指针的值获得一个副本,尽管在函数内部可以对这个副本指针的指向进行改变,但是无法改变原指针的指向!除非传入的是这个指针的地址!

效率

传值需要对参数进行拷贝,相对来是耗时一些,在C++中使用传引用有利于提高效率

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值