C++基础:引用
2016-07-17 19:49
302 查看
函数中参数的传递方式:
传值:在函数域中为参数重新分配内存,而把实参的数值传递到新分配的内存中。
优点:不会改变实参的值;
引用:引用不是定义一个新的变量,而是给一个已经定义的变量重新起一个别名,也就是C++系统不为引用类型变量 分配内存空间。引用主要用于函数之间的数据传递。
优点:如果实参是一个复杂的对象,重新分配内存会引起程序执行效率大大下降,而引用只传递地址,不会分配内存。
注意:
1.对数组只能引用数组元素,不能引用数组(数组名本身为地址)。
2.不能定义引用的引用(引用也是地址),所以当函数的参数为引用时,引用不能作实参。
3.const引用:引用在内部存放的是被引用对象的地址,不可寻址的值是不能引用的;
当引用作为形参时,实参也不能使用不可寻址的值,更不可能进行类型转换(如:实数转换为整数)。
但是const引用不同,它是只读的,为了绝对保证不会发生误改,编译器实现const引用时,生成一个临时对象,
引用实际上指向该临时对象,但用户不能访问它。所以const引用可以实现不可寻址的值(包括字面常量)的引用,
例如:
const double dval=1024; const int &ri=dval;
是正确的,编译器将其转换为:
const double dval=1024; int temp=dval; const int &ri=temp;
因有临时对象,引用和类型转换都实现了。当const引用作为形参时,实参也能使用不可寻址的值,并能进行类型转换
注意:只能对已有空间进行引用;
int a = 10;
int &b = a; //对变量引用
int *p = &a;
int *&q = p; //对指针引用
int ar[10] = {1,2,3,4,5,6,7,8,9,10};
int (&br)[10] = ar; //对数组引用
const int x = 100;
const int &y = x; //常量只能用常引用
int n = 20;
const int &m = n; //用m不能改变n
const double d = 12.34;
const int &f = d; //引用了中间的临时变量
注意:中间变量一般具有常量的性质,不可改变;
传值:在函数域中为参数重新分配内存,而把实参的数值传递到新分配的内存中。
优点:不会改变实参的值;
引用:引用不是定义一个新的变量,而是给一个已经定义的变量重新起一个别名,也就是C++系统不为引用类型变量 分配内存空间。引用主要用于函数之间的数据传递。
优点:如果实参是一个复杂的对象,重新分配内存会引起程序执行效率大大下降,而引用只传递地址,不会分配内存。
注意:
1.对数组只能引用数组元素,不能引用数组(数组名本身为地址)。
2.不能定义引用的引用(引用也是地址),所以当函数的参数为引用时,引用不能作实参。
3.const引用:引用在内部存放的是被引用对象的地址,不可寻址的值是不能引用的;
当引用作为形参时,实参也不能使用不可寻址的值,更不可能进行类型转换(如:实数转换为整数)。
但是const引用不同,它是只读的,为了绝对保证不会发生误改,编译器实现const引用时,生成一个临时对象,
引用实际上指向该临时对象,但用户不能访问它。所以const引用可以实现不可寻址的值(包括字面常量)的引用,
例如:
const double dval=1024; const int &ri=dval;
是正确的,编译器将其转换为:
const double dval=1024; int temp=dval; const int &ri=temp;
因有临时对象,引用和类型转换都实现了。当const引用作为形参时,实参也能使用不可寻址的值,并能进行类型转换
注意:只能对已有空间进行引用;
int a = 10;
int &b = a; //对变量引用
int *p = &a;
int *&q = p; //对指针引用
int ar[10] = {1,2,3,4,5,6,7,8,9,10};
int (&br)[10] = ar; //对数组引用
const int x = 100;
const int &y = x; //常量只能用常引用
int n = 20;
const int &m = n; //用m不能改变n
const double d = 12.34;
const int &f = d; //引用了中间的临时变量
注意:中间变量一般具有常量的性质,不可改变;
相关文章推荐
- C++ 迭代器容器学习
- c语言中的getchar()和putchar()
- 关于c++的小Tips
- c++ 常见问题之 vector 和数组
- 【链表】C++两个链表的公共结点
- C++ 初始化常量引用时内部的实现过程
- 详解C++中的纯虚函数(虚函数区别)&多态性 以及理解
- C++的简单总结(复制构造函数,深拷贝,前拷贝,默认属性)
- windos下没有dirent,导致纯c应用非常得不爽,本文介绍一个在windows下使用dirent的方法
- 从反汇编看待C++ new
- 反汇编->C++虚函数深度分析
- 反汇编角度->C++ const
- 反汇编->C++内联
- 反汇编->C++引用与指针
- 【链表】C++快慢两个指针解决问题(分别求倒数第k个、中间以及环的入口结点)
- leetcode_c++:链表:Convert Sorted List to Binary Search Tree(109)
- Cpp环境【Usaco 3.2.6】【Vijos1251】Павлов的香甜黄油
- K-means算法原理实现
- C++11新特性:range based for loop-范围for循环基本使用方法
- 找素数的一点思考