1.引用
1)引用不是变量
2)引用仅仅只是变量的别名
3)引用没有自己的独立内存空间
4)引用要与它所引用的变量共享内存空间
5)对引用所做的改变实际上是对它所引用的变量的改变
6)引用在定义的时候要初始化
7) 引用一经初始化不能够重新指向其他变量
<p>#include <iostream>
using namespace std;</p><p>void main()
{
int val = 100;
int val2 = 500;
cout<<val<<endl;</p><p> //引用必须初始化
int& refVal = val;
refVal = 200;
cout<<val<<endl;</p><p> //并非是将refVal 指向val2,而是将val2赋值给val
refVal = val2;
cout<<val<<endl;
}</p>
输出:100,200
const 引用的问题:
const int val = 1024;
const int& refVal = val;
int val2 = 1025;
//int& refVal2 = val2;
//const 可以指向非const对象
const int& refVal2 = val2;
val2 = 1026; //可以改变
//refVal2 = 1026; //不可以改变
不同数据类型的引用
int p = 5;
//double& refp = p; //error 无法用 "int" 类型的值初始化 "double &" 类型的引用(非常量限定)
const double& refp = p; //OK
double q = 6.12;
//int& refq = q; //error 无法用 "double" 类型的值初始化 "int &" 类型的引用(非常量限定)
const int& refq = q; //警告:从“double”转换到“const int”,可能丢失数据
引用传递
#include <iostream>
using namespace std;
void swap(int& x,int& y)
{
int temp = x;
x = y;
y = temp;
}
void main()
{
int a = 5;
int b = 6;
cout<<"a = "<<a<<",b = "<<b<<endl;
swap(a,b);
cout<<"a = "<<a<<",b = "<<b<<endl;
}
输出:
a = 5,b = 6
a = 6,b = 5
请按任意键继续. . .
返回引用
#include <iostream>
using namespace std;
int a[] = {1,2,3,4,5};
int& index(int i)
{
return a[i];
}
void main()
{
index(3) = 100;
cout<<a[3]<<endl;
}
注意:不可以返回局部变量的引用,因为局部变量在函数结束之后就销毁了,局部变量的引用是无效引用!!!
指针是间接访问,引用是直接访问!
指针有内存空间,引用没有,指针是变量,引用不是变量!
指针可以指向其他变量,引用不可以!
使用指针穿值涉及实参拷贝到形参,如果是引用类型(类)涉及拷贝构造函数,要分配空间!
使用引用传递参数不涉及拷贝,性能高!
指针传递的本质还是值传递!!!
指针是int类型的,32位系统4个字节!64位系统8字节!