C++学习总结--参数传递

1. 使用引用传递在方法传参中是比较好的方式,不会新分配内存空间

2. 而如果直接写成像java一样的方式;就会新开辟内存空间,并进行深层拷贝出一个新对象;

所以这是一种值传递,这和java中完全不一样,需要注意;

 3. 使用指针互换值只是互换了指针的指向,变量本身的地址不可能被互换,因为地址值是个常量,不可作为左值

指针指向的地址可以变,但是变量的内存中已经分配的地址不可能互换

由图可见,通过指针去访问的话 值变过来了,但是通过变量直接访问的话仍然没有变化; 

 4. 取地址符和引用符号是同样的,容易混淆,但这两个是完全不同的东西;

像如下这个就是定义变量引用;怎么判断他不是取地址符呢? 因为取地址符加上一个变量就成为一个常量的地址值了,不可能作为左值的,所以这里就是个引用

5.只是使用父类的句柄而非指针去接收一个子类的对象,可以使用到多态吗?

答: 编译没问题,但是不会调用到子类的方法,只会调用到父类的方法; 已本地验证过了;

由此可见,只要涉及到动态绑定的东西c++都是依赖于指针来实现的,这些都是引用传递等场景无法取代的,c++里面的引用作用场景有限不像java中的引用几乎和指针等价;

6. 用new关键字声明出来的变量必须用指针来接收(和java中的一个大区别)

c++定义一个对象,可以不用new关键字,这是分配在了栈上(不用程序员管理内存),也可以使用new关键字(程序员必须使用完后通过delete手动释放掉);

上图可见,new出来的如果不用指针接收会编译报错,而且这里34行注意和java的极大不同是这个34行的变量已经被初始化出来了,它可以直接赋值而不会产生空指针异常(这在java中就是各null),

这种情况不止是对象定义,同样适用stl模板中的容器,比如以下代码在c++中没有任何问题;

vector<int> abc; 

abc.push_back();

7.初始化一个数组或者变量直接赋值给一个指针是不行的,但是通过new关键字来动态申请的就可以(不用指针都不行,必须用)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值