const及static简单剖析
来源:互联网 发布:步进电机驱动器编程 编辑:程序博客网 时间:2024/06/05 16:35
1.const 修饰指针:
int m = 0;int n = 0;const int *p = &m;*p = 20; //nop = &n; //ok
当const放在 * 的左边,表示指针所指向的内容是不能通过指针来改变,但是指针本身可以改变。
int m = 0;int n = 0;int * const p = &m;*p = 20; //okp = &n; //no
当const放在 * 的右边,表示指针所指向的内容是可以通过指针来改变,但是指针本身不可以改变。
#include <stdio.h>int main(){ const int num = 10; int *p = (int *)# *p = 20; printf("%d\n", num); system("pause"); return 0;}
此代码若在VS中会输出20,但在C++编译器中编译会输出10而不是20;原因是编译器在编译期间可能对代码进行优化。
当编译器看到num被const修饰,从语义上讲这里的num是不期望被改变的,那么优化的时候就可以把num的值存放到寄存器(以提高访问的效率)中。以后只要使用num的地方都要去寄存器中取,那么即使num对应的内存中的值发生改变,寄存器也感知不到,所以造成输出结果为10。若想输出为20,可在const前加上volatile,增加可见性。
2.static作用:
#include <stdio.h>static int m;void fun1(){ static int n = 0; n++; printf("%d ", n);}void fun2(){ int m = 0; m++; printf("%d ", m);}int main(){ int i = 0; for (i = 0; i < 10; i++) { fun1(); //结果为1 2 3 4 5 6 7 8 9 10 } printf("\n"); for (i = 0; i < 10; i++) { fun2(); //结果为全1 } printf("\n"); system("pause"); return 0;}
修饰变量(局部/全局):
局部变量——改变的是存储类型(自由—>静态),同时影响生命周期,但不改变作用域
全局变量——改变的是链接属性(外部链接属性—>内部链接属性)
修饰函数:
改变的是链接属性(外部链接属性—>内部链接属性)
阅读全文
0 0
- const及static简单剖析
- const 和 static 剖析
- const, static, const static
- c++ static及const(开发者在线)
- Static、Extern、Volatile及Const关键字总结
- Static、Extern、Volatile及Const关键字总结
- Static、Extern、Volatile及Const关键字总结
- const 和 static的用法及作用
- const static 与static const const static
- const、static
- Static & const
- const static
- static const
- const&static
- static /const
- const & static
- static const
- static const
- 1-行列式初步
- ABP官方文档(三十九)【Notification,Message...】
- 【日志】最后的时光①
- 算法设计与分析(一) 蛮力法
- 11.5事件监听
- const及static简单剖析
- Mysql账户密码修改
- luogu 1063
- centos6.5安装redis(缓存数据库)
- Zxing
- 计算机网络基本知识
- leetcode 4.median of Two Sorted Arrays
- ABP官方文档(四十)【嵌入资源文件】
- js笔记3