Snowming04's Blog
一颗红❤
Toggle navigation
Snowming04's Blog
主页
Cobalt Strike
Accelerated C++
区块链安全
友链
关于我
常用工具
代码积累
归档
标签
【C++进阶】04. const 常量、引用
2020-03-27 11:03:28
357
0
0
snowming
# 0x01 const常量 **<u>const常量的特点</u>** - 必须初始化 - 不能被修改(其实是可以通过指针间接修改) - 对于常量是在编译时刻做的检查 **<u>const常量与宏的区别</u>** - 宏没有类型,不占内存空间 - const 常量有类型,并且会做类型检查 **<u>修改const常量</u>** 利用指针实现修改 const 常量: ``` const int nNum = 100; int *p = (int *)&nNum; *p = 10; cout << nNum << endl; //但是最终输出的还是100,为什么? ```  分析:编译器在处理const常量时,一旦const常量的值确定了,就会进行优化,认为所有用到const常量的地方的值都是不会变化的,在编译阶段就会把`cout << nNum << endl`这种语句给优化了。 ``` const int nNum = argc; //让编译器在编译阶段不知道 const 常量的值,就无法优化了 int *p = (int *)&nNum; *p = 10; cout << nNum << endl; //可以实现修改 ```  **<u>常量和指针</u>** 常量和指针的结合: - const Type * :指针可以修改,但是指向的内容不能被修改 - Type const * :与上面的等价 - Type * const :指针不可修改,但指向的内容可以被修改 - const Type const * :指针和指向的内容都不能被修改 常见用途:限定某些内容不能被修改 char *strcpy( char *strDestination, const char *strSource ); //限定strSource是常量 常量指针的转换:常量指针不能转换为普通指针 char* p1 = NULL; const char* p2 = p1; //可以 p1 = p2; //报错:“=”: 无法从“const char *”转换为“char *” # 0x02 引用 - 引用:引用是变量的别名 引用必须初始化 引用初始化时给变量名,不能是字面值常量(不能是int& n=1;) 引用和指针的异同 int m = 10; int &k = m; int *p = &m; 三者在堆栈中的分步情况 总结:引用和指针在内存中是一样的,生成机器码后二者是等价的 指针的引用:int *&n 引用只有一级,不能向指针那样有二级指针之类的,int &&n是错误的 常引用 常引用 int &n = 1; //错误:“初始化”: 无法从“int”转换为“int &” const int &m = 1; //正确 cout输出float类型的整数形式 如float fNum=3.14f;输出3.14在内存中的整数 float fNum = 3.14f; cout.setf(ios::showbase); cout << hex << (int&)fNum << endl;
上一篇:
朴实无华的域初学者
下一篇:
【C++进阶】03. 输入、输出
0
赞
357 人读过
新浪微博
微信
腾讯微博
QQ空间
人人网
提交评论
立即登录
, 发表评论.
没有帐号?
立即注册
0
条评论
More...
文档导航
没有帐号? 立即注册