指针和引用
来源:互联网 发布:拉菲软件下载 编辑:程序博客网 时间:2024/06/05 20:47
指针和引用
引用
引用:引用不是一个新的变量,而是一个已经存在的变量的别名。比如你同学在学校叫你王五,回到家里,家里人叫你小王一样,虽然叫法不同,但实际上指的都是一个人。
下面看一段代码
void test(){ int a = 1; int e = 4; int &b = a;//引用的格式:类型 &引用变量名=已定义过的变量名 //int &b;//这样是非法的,引用必须初始化,否则不知道自己是谁的别名 //int &b = e;//这样是非法的,引用只能初始化一次,不能改变为在引用其它的变量 int &c = a;//可以有多个别名 int &d = c;//d为c的别名,这是合法的,别名的别名 a = 2; b = 3; cout << a << endl;//3 cout << b << endl;//3 cout << c << endl;//3 cout << d << endl;//3}
最终执行的结果a和b和c都为3,b和c都是a的别名。
可以总结出引用具有以下特点:
1.一个变量可取多个别名。
2.引用必须初始化。
3.引用只能在初始化的时候引用一次,不能改变为在引用其它的变量。
const 引用
void test1(){ int a = 1; const int &b = a; a = 2; //b = 3;非法,被const修饰,b为常量(不能被修改的量),不能被赋值 cout << a <<' '<<b << endl;//a=3,b=3 const int c = 4; const int &d = c; //d = 5;非法,被const修饰,d为常量(不能被修改的量),不能被赋值 const int &e = 6;//合法,常量具有长属性,只有常引用(被const修饰)可以引用常量,可理解为e为6的别名 cout << c << ' ' << d << endl;//c=4,d=4 cout << e << endl;//e=6 double f = 1.1; //int &g = f;非法,f为double类型,g为int类型,f赋值给g时要产生一个临时变量,也就是说g引用的是这个带有长属性的变量,所以不能赋值 const int &h = f; cout << f << ' ' << h << endl;//合法,f=1.1,h=1(double转换成int,会有精度丢失)}
引用作为参数
#include<iostream>using namespace std;void exchange(int a,int b) //传值调用,实现不了交换{ int tmp = a; a = b; b = tmp;}void Swap(int &a,int &b) //传引用,这里的形参是实参的别名{ int tmp = a; a = b; b = tmp;}void Swap(int *a, int *b) //传指针,与上面的Swap函数构成了重载{ int tmp = *a; *a = *b; *b = tmp;}void test() //测试函数{ int a = 1; int b = 3; exchange(a, b); cout << "a=" << a << ' ' << "b=" << b << endl;//a=1,b=3 没有完成交换 Swap(a, b); cout << "a=" << a << ' ' << "b=" << b << endl;//a=3,b=1 完成了交换 Swap(&a, &b); cout << "a=" << a << ' ' << "b=" << b << endl;//a=1,b=3 完成了交换,因为上面的Swap函数已经交换过一次了,所以再次交换又交换回去了}int main(){ test(); system("pause"); return 0;}
exchange( )函数不能完成两个数的交换,是因为它是传值调用,传参的时候传的只是a和b的一份临时拷贝,在函数内部完成了交换,但是函数调用完成后,这两个值就被释放掉了,所以没有完成交换。
传值和传引用作为返回值
int &Sum(int a, int b){ int ret = a + b; return ret;}int Add(int a, int b){ int ret = a + b; return ret;}
通过反汇编看传值返回和传引用返回
结论:
1.不要返回一个临时变量的引用。
2.如果返回对象出来当前的作用域依然存在,则最好使用引用返回,这样更高效。
指针和引用的区别和联系
1.引用只能在定义时初始化一次,之后不能改变指向其他变量(从一而终),指针变量的值可以发生变化。
2.引用必须指向有效的变量,而指针可以为空。
3.sizeof引用对象和指针对象的意义不一样,sizeof引用得到的是所指向变量的大小,而sizeof指针是对象地址的大小。
4.指针和引用自增(++)和自减(–)意义不一样。
5.相对而言,引用比指针更安全。
总结
指针比引用更加灵活,但是也更危险,使用指针时一定要检查指针是否为空,指针所指的地址释放后最好置0,否则可能存在野指针的问题。
0 0
- 指针和指针引用
- 指针和指针引用
- 指针和指针的引用
- 指针和指针的引用
- 指针,和指针的引用
- 指针和指针的引用
- 引用和指针小结
- 指针和引用
- 区分指针和引用
- 指针和引用
- 指针和引用
- 指针和引用
- 指针和引用
- 引用和指针
- 函数指针和引用
- 引用和指针
- 引用和指针
- 引用和指针
- Ajax请求设置默认的值
- linux网络编程(3)——进程和线程
- Scrapy爬虫框架教程(三)-- 调试(Debugging)Spiders
- bootstrap-datetimepicker选择年和月
- IO流体系
- 指针和引用
- time_expire时间过短,刷卡至少1分钟,其他5分钟
- java.lang.NoSuchMethodError
- smartConfig---通过数据包长度位作为编码位,进行短数据通讯
- struts2-Action-2-访问实现过程
- 机器学习算法笔记之6:数据预处理
- hdu1036 Average is not Fast Enough!(水题一枚)
- 非阻塞轮询读终端和等待超时
- linux网络编程(4)——网络TCP_IP协议族