博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
传值与传引用
阅读量:6366 次
发布时间:2019-06-23

本文共 1131 字,大约阅读时间需要 3 分钟。

1、在C++中,可认为只有传值和传引用。传指针本质上就是传值。将a指针传给b指针,两个指针是两个对象(而引用是别名),它们的值相等,即a、b指向同一块内存。这个时候,要千万注意:修改指针使它指向另一块内存与修改指针指向的内容之间的区别。以b为例说明,修改b使它指向另一块内存,a不变,还是指向原来的内存,内容也不变。修改b指向的内容,由于a,b指向同一块内存,也就是修改a指向的内容,a内容发生变化。

2、复制指针是浅拷贝,两个指针地址相同,共享同一块内存。如何进行深拷贝?

  把原指针指向的内容做一个整体拷贝,新指针指向拷贝的内容,这就是深拷贝。注意:深拷贝后,每个指针指向不同的内存,内容相等,但是指针值不相等。

3、考虑,下面的需求:指针a传给指针b,我们通过修改b指向的内容,也就相当于修改a指向的内容。那么考虑。a传给c,我想通过修改c,来修改a的指向,该怎么办呢?

  a、创建一个指针a的引用,相当于给指针取个别名,这种情况下,修改别名的指向,就是修改a的指向。注意:指针的引用的写法,考虑int的引用为int &a;那么int指针的引用就是int* &pi。特别注意:没有引用的指针的概念。也就是说,没有int& *pi;指向引用的指针就是指向原对象的指针,即int *pi。很好理解:引用是别名,指向int& 的指针就是,指向int的指针。因此,没有指向引用的指针的概念。

  b、增加一个间接层,使用指针的指针。

4、引用本身也是用指针实现的,可认为引用对指针进行了封装。行为上像个对象,可认为是对象的别名,传递时避免了对象的整体拷贝。

1 //int a =3; 2 //int b =7; 3 //int* p1 = &a; 4 //int* p2 = p1; 5 //*p2 = 5; // 修改p2指向的内容,p1的内容也发生变化 6 //p2 = &b; // 修改p2的指向,p2的内容变化,p1的指向不变,内容不变。 7  8  9 //int a =3;10 //int b =7;11 //int* p1 = &a;12 //int* &p2 = p1;13 //p2 = &b; // 修改别名的指向,就是修改原指针的指向14 //*p2 = 8; // 修改别名指向的内容,就是修改原指针指向的内容。15 16 //int a =3;17 //int b =7;18 //int* p1 = &a;19 //int** p2 = &p1; // p2是指针的指针20 //*p2 = &b; // 修改p2指向的内容,就是修改p1的指向21 //**p2 = 8; // 两次解引用,修改p2的内容,就是修改p1的内容

 

转载地址:http://xzrma.baihongyu.com/

你可能感兴趣的文章
力扣(LeetCode)22
查看>>
这样理解原型与原型链比较简单
查看>>
如何将视频分割成几部分 视频剪切软件哪个好
查看>>
想要学习python,你应该知道的内容是啥?
查看>>
leetcode378. Kth Smallest Element in a Sorted Matrix
查看>>
Noark入门之极速体验
查看>>
JS每日一题:Vue-router有哪些钩子?使用场景?
查看>>
ggit (git gui) --- 开发记录 (一)
查看>>
109. Convert Sorted List to Binary Search Tree
查看>>
带你了解TCP/IP协议族
查看>>
从零开始的无人驾驶 2
查看>>
Ajax同步和异步的区别
查看>>
C++中new的三种使用方法说明
查看>>
localStorage应用(写的时间缓存在本地浏览器)
查看>>
Javascript编码规范
查看>>
laravel-admin 使用记录(2) - 快速搭建 CURD
查看>>
自定义SpringBoot项目的Maven原型
查看>>
solidity不支持动态扩容
查看>>
5.java String对象
查看>>
基于 less,sass,stylus三种预处理rem
查看>>