C++语言— 引用与指针的区别
来源:互联网 发布:dijkstra算法 c语言 编辑:程序博客网 时间:2024/05/17 01:00
引用的意义和使用
刚刚开始接触C++,当然第一个学到的知识点就是引用,那么什么是引用呢?
引用不是定义一个新的变量,而是给一个已经定义的变量重新起一个别名。
定义的格式为: 类型 &引用变量名 = 已定义过的变量名;
引用的特点:
- 一个变量可取多个别名。
- 引用必须初始化。
- 引用只能在初始化的时候引用一次,不能改变为再引用其他的变量。
现在我们来一个例子试一试:
#include<iostream>#include<windows.h>using namespace std;void TestReference1(){int a = 1;int& b = a;cout << "a:address->" << &a << endl;cout << "b:address->" << &b << endl;a = 2;b = 3;int& c = b; // 引用一个引用变量,别名的别名c = 4;}int main(){TestReference1();system("pause");return 0;}
看看结果呢:引用不是定义一个新的变量,而是给一个已经定义的变量重新起一个别名。
结果就是对这些话充分的论证。
const 引用:
void TestReference2()
{
intd1= 4;
constint&d2=d1;
d1= 5; // d1改变d2的值也会改变。
//d2 = 6; //不能给常量(不能被修改的量)赋值
constintd3= 1;
constint&d4=d3;
//int&d5 = d3;
constint&d6= 5; //常量具有常性,只有常引用可以引用常量
doubled7= 1.1;
//int& d8 = d7; //d7是double类型,d8是int,d7赋值给d8时要生成一个临时变量
//也就是说d8引用的是这个带有常性的临时变量,所以不能赋值。
//这里其实d7为d8生成了一个强制类型转换成int的临时变量,所以不能赋值。
constint&d9=d7;
}
引用作为参数:
如果形参为引用类型,则形参是实参的别名。
这个例子就是利用引用来交换值。
void Swap(int& left, int& right){int temp = left;left = right;right = temp;}void TestReference2(){int a = 3;int b = 8;cout << "a:" << a << endl;cout << "b:" << b << endl;Swap(a, b);cout << "a:" << a << endl;cout << "b:" << b << endl;}int main(){TestReference2();system("pause");return 0;}
还有一个需要提醒的:当不希望函数内改变参数x的值时,尽量使用常引用传参。
传值做返回值&传引用作为返回值
int& Add(int d1, int d2)// int Add ( int d1 , int d2){int ret = d1 + d2;return ret;}void test(){int a = 3, b = 4;int c = Add(a, b);cout << "c:" << c << endl;}int main(){test();system("pause");return 0;}
不要返回一个临时变量的引用。
如果返回对象出了当前函数的作用域依旧存在,则最好使用引用返回,因为这样更高效。
指针和引用的区别:
1.引用只能在定义时初始化一次,之后不能改变指向其它变量(从一而终);指针变量的值可变。
2.引用必须指向有效的变量,指针可以为空。
3.sizeof指针对象和引用对象的意义不一样。sizeof引用得到的是所指向的变量的大小,而sizeof
指针是对象地址的大小。
4.指针和引用自增(++)自减(--)意义不一样。
5.相对而言,引用比指针更安全。
一点小建议:指针比引用更灵活,但是也更危险。使用指针时一定要注意检查指针是否为空。指针所
指的地址释放以后最好置0,否则可能存在野指针问题。
1 1
- C语言---指针与引用的区别
- 【C/C++】指针与引用的区别
- C语言中引用及指针和引用的联系与区别
- C++语言— 引用与指针的区别
- 指针与引用的区别 (MoreEffictive C++)
- C/C++ 指针与引用的区别
- 【C++】指针与引用的区别
- 引用 与 指针的区别 -- C
- C中指针与引用的区别
- C/C++ 指针与引用的区别
- c中指针与引用的区别
- JAVA 引用和C语言指针的区别
- C语言数组与指针的区别
- 【C++】指针&引用的区别
- C++——指针与引用型指针的区别
- C语言——结构体与指针引用&结构体数组与指针引用
- 指针与引用的区别
- 指针与引用的区别
- HttpServletRequest接口
- JavaSE_39th_Map接口
- 略谈矩阵乘法优化递推
- 从逆序对问题展开 归并排序习题归纳
- 用到索引器创建一个集合DEMO
- C++语言— 引用与指针的区别
- UVA-1225 Digit Counting
- java认知盲点(1)
- IO流_数据输入输出流的概述和讲解
- PowerShell常用命令总结
- 线性表-定义和顺序存储结构
- POJ3204——Ikki's Story I
- 1106. Lowest Price in Supply Chain
- horizon创建网络前端代码分析