C++传值、引用和指针的区别
来源:互联网 发布:古天乐杨过 知乎 编辑:程序博客网 时间:2024/06/06 06:40
今天重新看了看C++中类的具体实现,发现参数的传值、引用和指针方面认识理解的不够好。所以google了一些,现记录下来帮助自己以后回顾。
值传递:
形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。
指针传递:
形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作
引用传递:
形参相当于是实参的“别名”,对形参的操作其实就是对实参的操作,在引用传递过程中,被调函数的形式参数虽然也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。
#include<iostream>
using namespace std;
void swap(int a,int b) //void swap(int & a,int &b) 函数内容不变 //void swap(int * a,int *b) 函数内容改成相应的指针调用(你懂得 {
int temp;
temp=a;
a=b;
b=temp;
}
main()
{
int a=3,b=5;
cout<< "before ‘swap’:a="<<a<<",b="<<b<<endl;
swap(a,b);
cout<<"after ‘swap’:a="<<a<<",b="<<b<<endl;
}
传值时,相当于a,b新开辟一个内存区域,拷贝复制其值备份进入swap函数;
引用时,引用原来值所在的地址,不另开辟一块内存,但是在使用方法上和传值没有太大区别;
指针时,也要开一片内存来复制传递参数的值。如果是不好的的很容易引发外延性破坏。
应用:
引用和指针在类的多样性方面比较适用。例如:
1、在赋值和赋值构造函数中,引用能很好轻松的解决问题
2、在重载符号时,需要使用引用;
3、C++调用引用比较安全。
总结:
当参数不希望被修改时,使用引用+const;当有可能要修改时,使用指针。
使用指针很容易引发外延性破坏。虽然引用也可以,但是要稍稍做点手脚。
C++中指针越少出现越好,能用引用替代就替代,能包装就包装。
- 【C/C++】引用和指针的区别
- 指针和引用的区别(C++)
- C程序设计语言--指针和引用的区别
- 引用和指针的区别C/C++
- [C++]指针和引用的区别
- C++:指针和引用的区别
- 【C++】指针&引用的区别
- 【C/C++】概念:指针和引用的区别
- C++传值、引用和指针的区别
- c++引用类型和指针类型的区别
- 【C/C++学习】之一、指针和引用的区别
- JAVA 引用和C语言指针的区别
- 指针和引用的区别
- 指针和引用的区别
- 指针和引用的区别
- 指针和引用的区别
- 指针和引用的区别
- 指针和引用的区别
- listview item背景设置为透明
- 导出批注工具--用VBA脚本导出Word评审文档的所有批注
- poj2823Sliding Window(单调队列入门)
- iPhone图片拉伸:resizableImageWithCapInsets
- sys/stat.h
- C++传值、引用和指针的区别
- Flume日志收集
- C和C++中内存分配的细节
- 关于Java 数组内存分配一点认识
- pxe安装linux主要过程记录
- hdu1178(科学记数法)
- POJ 2117 Electricity
- 【微软面试题】在二叉搜索树中找最小的大于某个key值的节点
- Hibernate中session.get和session.load的区别