| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 570 人关注过本帖
标题:为什么运行结果是这样的?
取消只看楼主 加入收藏
书生等待
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:280
专家分:689
注 册:2013-2-22
结帖率:100%
收藏
已结贴  问题点数:40 回复次数:4 
为什么运行结果是这样的?
#include<iostream>
using namespace std;
int main()
{

    const int a=7;
    int *b=(int *)&a;
    *b=16;
    cout<<*b<<endl;
    cout<<a<<endl;
    return 0;
}
调试环境为vs2010
调试结果:
图片附件: 游客没有浏览图片的权限,请 登录注册

打印结果:
图片附件: 游客没有浏览图片的权限,请 登录注册

调试结果中a已经是16,而打印出以后还是7
2014-09-11 15:21
书生等待
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:280
专家分:689
注 册:2013-2-22
收藏
得分:0 
回复 2 楼 wp231957
去掉const的话,a和*b的值都会是16,这个题就是问运行结果是什么?然后问const的运行原理
2014-09-11 15:39
书生等待
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:280
专家分:689
注 册:2013-2-22
收藏
得分:0 
回复 5 楼 embed_xuel
我不懂汇编,,,
2014-09-11 18:44
书生等待
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:280
专家分:689
注 册:2013-2-22
收藏
得分:0 
回复 6 楼 wp231957
cout<<a<<endl;
00DF1406  mov         esi,esp  
00DF1408  mov         eax,dword ptr [__imp_std::endl (0DF82A0h)]  
00DF140D  push        eax  
00DF140E  mov         edi,esp  
00DF1410  push        7  
00DF1412  mov         ecx,dword ptr [__imp_std::cout (0DF8298h)]  
00DF1418  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (0DF829Ch)]  
00DF141E  cmp         edi,esp  
00DF1420  call        @ILT+310(__RTC_CheckEsp) (0DF113Bh)  
00DF1425  mov         ecx,eax  
00DF1427  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (0DF8294h)]  
00DF142D  cmp         esi,esp  
00DF142F  call        @ILT+310(__RTC_CheckEsp) (0DF113Bh)


我不懂汇编,但是这个push  7就是入栈的意思吗?
2014-09-11 19:15
书生等待
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:280
专家分:689
注 册:2013-2-22
收藏
得分:0 
回复 10 楼 TonyDeng
这是中兴的题,t版
2014-09-11 19:16
快速回复:为什么运行结果是这样的?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016225 second(s), 9 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved