输出结果:
root@txp-virtual-machine:/home/txp# ./a.out
y = 8
p = 0x7ffd78559684
代码版本三:
#include <stdio.h>
int main()
{
volatile const int y = 2;
int *p = const_cast<int*>(&y);
*p = 8;
printf("y = %d",y);
printf("p = %p",p);
const int z = y ;//只读变量
p = const_cast<int*>(&z);
*p= 9;
printf("z = %d",z);
printf("p = %p",p);
return 0;
}
输出结果:
root@txp-virtual-machine:/home/txp# ./a.out
y = 8
p = 0x7ffc5d651250
z = 9
p = 0x7ffc5d651254
代码版本四:
#include <stdio.h>
int main()
{
char c = 'c';
char& rc = c;
const int& trc = c; // char 类型默认转换为 int;const 引用初始化类型不同,将得到新的只读变量,所以改变 rc 和 trc 没有丝毫关系,从我们的输出结果可以看出来
rc = 'a';
printf("c = %c",c);
printf("rc = %c",rc);
printf("trc = %c",trc);
return 0;
}
结果输出:
root@txp-virtual-machine:/home/txp# ./a.out
c = a
rc = a
trc = c
二、引用的总结:
1、引用与指针有什么关系,以及如何理解"引用的本质就是指针常量"?
(1)指针是一个常量:
值为一个内存地址,不需要初始化,可以保存不同的地址
通过指针可以访问对应内存地址中的值
指针可以被const修饰成为常量或者只读变量
(2)引用只是一个变量的新名字:
对引用的操作(赋值、取地址等)都会传递到代表的变量上
const引用使其代表的变量具有只读属性
引用必须在定义时初始化,之后无法代表其它变量
(3)从使用c++语言的角度来看:
引用与指针没有任何的关系
引用是变量的新名字,操作引用就是操作对应的变量
(4)从c++编译器的角度来看:
为了支持新概念"引用"必须要一个有效的解决方案
在编译器内部,使用指针常量来实现"引用"
因此"引用"在定义时必须初始化