TOP
|
引用的本质分析(二)
的操作(赋值、取地址等)会传递到代表的变量上 |
指针可以保存不同的地址 |
引用在初始化之后无法代表其他变量 |
指针可以被const修饰,成为常量或只读变量 |
const引用使其代表的变量具有只读属性 |
在工程项目开发中
- 当进行C++编程时,直接站在使用的角度,引用和指针没有任何关系
- 当对C++代码进行调试分析时,一些特殊情况,可以考虑站在C++编译器的角度,引用在内部实现为指针常量
我们给出一个站在C++编译器的角度看待引用的示例,下面这段代码有问题吗?
int a = 1;
int b = 2;
int *pc = new int(3);
int &array[] = {a, b, *pc};
- 数组是一片连续的内存空间
- 引用数组会破坏该特性,各元素代表的变量可能存储在不同的位置
- 因此,C++不支持引用数组!!!!!!
#include <stdio.h>
int a = 1;
struct SV
{
int &x;
int &y;
int &z;
};
int main()
{
int b = 2;
int *c = new int(3);
SV sv = {a, b, *c};
int &array[] = {a, b, *c}; //&array[1] - &array[0] != 4,编译报错
printf("&sv.x = %p\n", &sv.x);
printf("&sv.y = %p\n", &sv.y);
printf("&sv.z = %p\n", &sv.z);
delete c;
return 0;
}
首先,注释掉代码第17行,编译运行结果如下,可以看出打印出的内存地址是各不相同的。
然后,去除代码第17行注释,结果编译报错,原因就是数组的三个元素地址不连续,而是各不相同。
|