12-经典问题分析一-const和引用的疑问
程序员文章站
2022-03-26 12:33:46
...
1、关于const的疑问
2、
3、
#include <stdio.h>
int main()
{
const int x = 1; //const 常量 x,用字面量初始化的,存在字符号表中,x分配的空间未使用
const int& rx = x; //只读变量rx,rx为编译器为x常量所分配未使用的空间,这时候rx代表一个只读变量
int& nrx = const_cast<int&>(rx);//消除rx的只读变量的只读属性,得到一个普通变量 nrx,nrx为rx空间的引用
nrx = 5;
printf("x = %d\n", x);
printf("rx = %d\n", rx);
printf("nrx = %d\n", nrx);
printf("&x = %p\n", &x);
printf("&rx = %p\n", &rx);
printf("&nrx = %p\n", &nrx);
volatile const int y = 2;//y是只读变量
int* p = const_cast<int*>(&y);//去除y地址的只读属性
*p = 6; //y被修改
printf("y = %d\n", y);
printf("p = %p\n", p);
const int z = y;//创建一个只读变量z用y赋值,
p = const_cast<int*>(&z);//去除只读属性
*p = 7; //修改z的值
printf("z = %d\n", z);
printf("p = %p\n", p);
char c = 'c';
char& rc = c;
const int& trc = c;//const初始化类型不同,则创建为新的只读变量trc 为int,c为 char 类型,所以trc = 'c'
rc = 'a';
printf("c = %c\n", c);
printf("rc = %c\n", rc);
printf("trc = %c\n", trc);
return 0;
}
结果:
x = 1
rx = 5
nrx = 5
&x = 0x7ffe89359240
&rx = 0x7ffe89359240
&nrx = 0x7ffe89359240
y = 6
p = 0x7ffe89359244
z = 7
p = 0x7ffe89359248
c = a
rc = a
trc = c
4、关于引用的疑问
5、引用的本质是常量指针
6、
7、小结
上一篇: C# 创建邮件合并模板并合并文本、图片
下一篇: 算法笔记—指针