标签:
1 #include <iostream> 2 3 int main(void) 4 { 5 const int a = 10; 6 int* p = (int*)&a; 7 *p = 20; 8 std::cout << a << "|" << &a << std::endl; 9 std::cout << *p << "|" << p << std::endl; 10 return 0; 11 }
输出结果
10|0x7ffed3169dfc
20|0x7ffed3169dfc
这个就有点奇怪了, 明明地址是一样的值确不一样. 我估计是编译器搞的鬼.
于是我打印了 *(&a) 和 *(int*)((char*)(&a)) 发现前者是 10, 后者是 20.
编译器会将连续的 * 和 & 直接优化掉, 但估计后面那个就不会优化了. 所以输出了 20.
所以, 定义成为常量的符号, 在后面的使用都会是常量的值. 这应该是为了防止常量被意外修改.
标签:
原文地址:http://www.cnblogs.com/negro/p/5137931.html