目录
概念:
编辑
引用的特性:
引用中的权限问题:
引用与指针的区别:
引用的使用:
概念:
引用是给已存在变量取一个别名,编译器不会为引用变量开辟内存空间。
引用的符号:&
引用的方式:数据类型+&+数据名
概念证明:
int main()
{int i = 100;int& m = i;cout << m << endl;return 0;
}
引用的特性:
1.引用必需初始化。
2.引用一旦引用一个实体,就不能再引用其它实体。
3.不存在空引用。
4.不存在多级引用。
代码演示:
int main()
{int i = 100;int& m = i;int n = 1000;m = n;//这里改变m进行测试cout <<"m=" << m << endl;cout <<"i=" << i << endl;return 0;
}
这里有读者会问将m=n的代码写为&m=n不就可以了吗,这里我需要解释一下&m=n的含义:
&m=n,表示将m的地址改为n的值,这样写编译器会直接报错!
所以在学到引用时,这里我们需要注意不要将引用与指针相混淆!!!!
引用中的权限问题:
对于数据的引用我们需要注意引用后数据的权限可以平移或缩小,但不能扩大。(也可以理解为:引用需要确保数据安全)。
代码演示:
int main()
{const int i = 100;int& m = i;return 0;
}
这里我们运行代码,会发现报这样的错误:
这里我们就存在数据权限放大问题:原先的数据i是不可以更改的,而我们对数据进行引用后的m是可以更改的,这样写会放大数据的权限,也就是会破坏数据的安全。
但是数据的权限是可以平移或者缩小的
int main()
{const int i = 100;const int& m = i;//权限平移int n = 1000;const int& q = n;//权限缩小cout << "m=" << m << endl;cout <<"q=" << q << endl;return 0;
}
引用与指针的区别:
这里关于引用与指针的区别我们不再一一对比但是我们再将指针的特点讲述一下:
指针的特点:
1.可以不用初始化
2.可以改变指向的对象
3.可以指向空地址(NULL或者nullper)
4.存在多级指针
引用的使用:
扩展的了解一下:引用的底层实现其实是指针。
个人理解:对于引用的大部分场景其实也可以将其理解为指针
void mySwap(int& a, int& b)
{int c = a;a = b;b = c;
}
int main()
{int i = 100;int& m = i;int n = 1000;int& q = n;cout << "m=" << m << endl;cout <<"q=" << q << endl;mySwap(m, q);cout << "交换后:" << endl;cout << "m=" << m << endl;cout << "q=" << q << endl;return 0;
}