为什么一个指针和一个变量指向相同的地址,读取出来的值却不同呢?
#include<iostream>usingnamespacestd;intmain(){constinti=10;intj,*pt;pt=&j;pt++;*pt=11...
#include<iostream>
using namespace std;
int main()
{
const int i=10;
int j,*pt;
pt=&j;
pt++;
*pt=1111;
cout<<"变量i的地址="<<&i<<endl;
cout<<"变量i的值="<<i<<endl;
cout<<"指针pt指向的地址="<<pt<<endl;
cout<<"指针指向地址存储的值="<<*pt<<endl; return 0;
}
运行结果:
变量i的地址=0012FF6C
变量i的值=10
指针pt指向的地址=0012FF6C
指针指向地址存储的值=1111
请按任意键继续. . . 展开
using namespace std;
int main()
{
const int i=10;
int j,*pt;
pt=&j;
pt++;
*pt=1111;
cout<<"变量i的地址="<<&i<<endl;
cout<<"变量i的值="<<i<<endl;
cout<<"指针pt指向的地址="<<pt<<endl;
cout<<"指针指向地址存储的值="<<*pt<<endl; return 0;
}
运行结果:
变量i的地址=0012FF6C
变量i的值=10
指针pt指向的地址=0012FF6C
指针指向地址存储的值=1111
请按任意键继续. . . 展开
3个回答
展开全部
程序读const的值的时候,不会从内存里面拿,而是从缓存里面拿
所以你哪怕把i的值改了,读i的话还是原来的值
因为本来const的值就不希望被改,这是编译器的优化
所以你哪怕把i的值改了,读i的话还是原来的值
因为本来const的值就不希望被改,这是编译器的优化
追问
那如果const多了的时候,是不是会把缓存挤爆?这是编译器的优化,是不是换个编译器结果记可能不同了?
追答
C语音规定了。如果你通过指针修改了一个声明为const的值,那么读取这个值的时候,结果是"不可预计的",就是说,不同的编译器可能会给出不同的结果
程序员应该避免出现这样的情况,而不是去探讨究竟某种情况出现的原因,因为这个不是规范里面的
展开全部
#include<iostream>
using namespace std;
int main()
{
const int i=10;
int j,*pt;
pt=&j;// 这里指针指向了变量j
pt++; //指针变了,不再指向变量j了!!!!!
*pt=1111; // 注意,这里可不是j了!!!
cout<<"变量i的地址="<<&i<<endl;
cout<<"变量i的值="<<i<<endl;
cout<<"指针pt指向的地址="<<pt<<endl;
cout<<"指针指向地址存储的值="<<*pt<<endl; return 0;
}
using namespace std;
int main()
{
const int i=10;
int j,*pt;
pt=&j;// 这里指针指向了变量j
pt++; //指针变了,不再指向变量j了!!!!!
*pt=1111; // 注意,这里可不是j了!!!
cout<<"变量i的地址="<<&i<<endl;
cout<<"变量i的值="<<i<<endl;
cout<<"指针pt指向的地址="<<pt<<endl;
cout<<"指针指向地址存储的值="<<*pt<<endl; return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
参考CISC机中的“程序地址与内存地址分别寻址”
追问
我的计算机基础知识很薄弱,我都不知道CISC机是什么。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询