一段有趣的关于C++const的代码
2017-05-14 16:51
190 查看
直接上代码:
单看地址是一样的,没问题。可是值却不一样。怎么回事?
我们应该遵循C++中的const和non-const的语义,任何想要破坏这个语义的事情都会给我们带来未知的结果。
再来看C的一段程序:
#include <stdio.h>
int main()
{
const int a = 1;
int *p = (int*)(&a);
*p = 2;
printf("&a=%p\n", &a);
printf("p=%p\n", p);
printf("a=%d\n", a);
printf("*p=%d\n", *p);
return 0;
}
看输出结果:
在C中是可以通过指针来修改const常量的值。
using namespace std; int main() { const int a = 1; int *p = const_cast<int*>(&a); *p = 2; cout << "value a="<< a << endl; cout << "value *p=" <<*p << endl; cout << "address a=" <<&a << endl; cout << "address p=" <<p << endl; return 0; }试图通过指针来修改一个const常量的值。贴出结果:
单看地址是一样的,没问题。可是值却不一样。怎么回事?
我们应该遵循C++中的const和non-const的语义,任何想要破坏这个语义的事情都会给我们带来未知的结果。
再来看C的一段程序:
#include <stdio.h>
int main()
{
const int a = 1;
int *p = (int*)(&a);
*p = 2;
printf("&a=%p\n", &a);
printf("p=%p\n", p);
printf("a=%d\n", a);
printf("*p=%d\n", *p);
return 0;
}
看输出结果:
在C中是可以通过指针来修改const常量的值。
相关文章推荐
- 一段关于浏览器兼容的事件定位代码,经过测试!
- 一段有趣的代码
- 今天写的一段代码关于泛型的简单使用
- 一段有趣的代码,猜生日
- 关于线程池的一段代码
- 请高手务必帮忙,关于JAVA的一段代码!!!谢谢了
- 关于bitset 的一段代码--初级
- 关于一段while(1)改为do{}while(...);代码
- 关于Const的一段代码
- 一段关于webGL的代码
- 一段关于C内存分配的奇怪代码
- 关于C语言中的一段代码的运行菜鸟问的
- 昨天写了一段代码,关于ajax的,一直没有取到从另一个页面response出来的XML值。
- 一段有趣又实用的控制台工具代码
- 关于单击一个按钮时要执行一段代码:使鼠标变成漏斗;
- 关于try catch finally的一段测试代码
- 【转】关于使用printf和scanf对short进行输入输出的一段有趣对话
- 关于线程池的一段代码
- 关于JS对正文进行字数统计的一段代码
- 一段关于带阴影的UIView切圆角的代码