常量折叠
来源:互联网 发布:python 时间差 分钟 编辑:程序博客网 时间:2024/05/17 03:46
#include <iostream>
using namespace std;
int main()
{
const int i=5;
int* p= (int*)&i;
cout < <"p=" < <p < <endl;
cout < <"&i=" < <&i < <endl;
*p=100;
cout < <"*p=" < <*p < <endl;
cout < <"i=" < <i < <endl;
cout < <"p=" < <p < <endl;
cout < <"&i=" < <&i < <endl;
return 0;
}
p=0012FF7C
&i=0012FF7C
*p=100
i=5;
p=0012FF7C
&i=0012FF7C
"常量折叠"是 就是在编译器进行语法分析的时候,将常量表达式计算求值,并用求得的值来替换表达式,放入常量表。可以算作一种编译优化。
我只是改了这个地址内容,但是i还是0,
因为编译器在优化的过程中,会把碰见的const全部以内容替换掉(跟宏似的: #define PI 3.1415,用到PI时就用3.1415代替),这个出现在预编译阶段;但是在运行阶段,它的内存里存的东西确实改变了!!!
- int main(){ const int i=2; int* p=(int*)(&i); *p=100; cout<<"i的值为: "<<i<<endl; cout<<"指针指向的变量的值: "<<*p<<endl; cout<<"指针的值: "<<p<<endl; cout<<"i的地址: "<<&i<<endl; return 0;}
结果为:
2
100
0012FF7C
0012FF7C
- int main(){ const int& i=2; //加了个引用 int* p=(int*)(&i); *p=100; cout<<"i的值为: "<<i<<endl; cout<<"指针指向的变量的值: "<<*p<<endl; cout<<"指针的值: "<<p<<endl; cout<<"i的地址: "<<&i<<endl; return 0;}
结果为:
100
100
0012FF7C
0012FF7C
int main(){ int a=2; //加了这句 const int i=a; //用a赋值 int* p=(int*)(&i); *p=100; cout<<"i的值为: "<<i<<endl; cout<<"指针指向的变量的值: "<<*p<<endl; cout<<"指针的值: "<<p<<endl; cout<<"i的地址: "<<&i<<endl; return 0;}
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- c++常量折叠(常量替换)
- c++常量折叠(常量替换)
- 常量折叠-2
- XPath
- 猴子选大王(java求解)
- mssql分页
- 味觉记忆
- 开始运行命令集锦(整理版)
- 常量折叠
- 常量折叠-2
- javascript中文乱码 javascript传递中文参数值时乱码问题的解决
- 好烦!!!
- make android 时的 libwebcore.so error
- 使用memcached进行内存缓存
- 关于感应加热逆变电源
- Jquery 的积累
- pentaho在oracle中的部署