看下面的一段代码
1 const int i=0;2 int * j=(int*)(&i); // 运行正确,j确为i的地址,但 int *j=&i; 编译错误3 *j=1; //确实改变了i的值4 printf("%d %d\n",i,*j); //输出0 1
第三行代码执行后,i的值确实已经改变
然而printf的结果确实0 1,这是因为,在C++中对于const变量,在编译期就进行了替换,运行的时候printf中i已经被替换为0了,而*j是从内存中从新取值。
本文共 318 字,大约阅读时间需要 1 分钟。
看下面的一段代码
1 const int i=0;2 int * j=(int*)(&i); // 运行正确,j确为i的地址,但 int *j=&i; 编译错误3 *j=1; //确实改变了i的值4 printf("%d %d\n",i,*j); //输出0 1
第三行代码执行后,i的值确实已经改变
然而printf的结果确实0 1,这是因为,在C++中对于const变量,在编译期就进行了替换,运行的时候printf中i已经被替换为0了,而*j是从内存中从新取值。
转载于:https://www.cnblogs.com/gaoyanqing/p/4453263.html