关于常量修饰符 const
来源:互联网 发布:软件著作权说明书范本 编辑:程序博客网 时间:2024/06/05 17:41
一直对const的理解就是简单的常量修饰符,定义一个不可改变的变量【注意这里是变量,也就是说const叫常量修饰符,但实际上它定义的是一个变量,只不过由编译器限定未不可修改】。
后来听了老师的课发现const有许多有意思的用法:
1:const int i = 10; --> i的值不可改变,若i = 11;则报错
2:const int *j = (int*)&i; 和 int const *j = (int*)&i; --> j指向的变量的内容不可变,若 *j = 20; 则报错
3:int * const t = (int*)&i; --> t指向的地址不能改变,若t++; 则报错
老师给出的建议是看const前面是什么,那么那部分就不可修改,比如int const i = 5; const 前是int, 则表示i的值不能被修改
int const * j; const 前也是int, 则表示i指向的变量的值不能被修改
而int * const j; const 前是int *,表示指针指向的值不能被修改
还有一个有意思的大家可以自己试一下,这个我还不知道是什么原因,
const in a = 10;int *p = (int*)&a;int *j = (int*)&a;cout << *p << " " << a << " " << *j << endl;cout << p << " " << &a << " " << j << endl;*p = 20;cout << *p << " " << a << " " << *j << endl;cout << p << " " << &a << " " << j << endl;
上面这段代码的结果很有意思,执行完*p = 20;后,*p和*j都变为20,但是a还是10。与此同时可以看到p和j指向的地址和a的地址是相同的。
在别人的博客里找到了答案
http://blog.chinaunix.net/uid-26853826-id-3365403.html
const全局变量存储在全局存储空间,其值只有可读属性,不能修改;
const局部变量存储在堆栈中,可通过指针修改其值;
const变量在预处理是处理,编译器只对其值读取一次。
- 关于常量修饰符 const
- 关于const修饰符
- 关于const修饰符
- 指针与常量修饰符const
- const修饰常量
- const修饰常量
- const修饰符,以及指针常量,常量指针的理解
- const限定修饰符,常量指针,引用类型
- c语言的指针、数组和常量修饰符const
- 关于const修饰变量
- 关于const修饰指针
- 关于const修饰指针
- 关于const修饰指针
- 关于const修饰
- 关于常量const
- C语言 用const修饰符定义只读常量,只读常量与#define定义的符号常量的区别
- const修饰指针的用法:常量指针和指针常量
- 常量,异常,修饰符
- Maven入门指南(一)
- 跳台阶(斐波那契数列)
- Python实现递归函数:汉诺塔
- Why singleton is bad?
- 为什么使用IOC容器
- 关于常量修饰符 const
- POJ 2777 线段树
- 修改Tomcat Connector运行模式,优化Tomcat运行性能
- POJO 与 JavaBean 的区别
- JAVA之变量隐藏、静态方法隐藏
- capistrano3.5环境搭建
- UITableView的基本使用(二)
- vim括号匹配和跳转技巧
- CF 160D Edges in MST