| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1303 人关注过本帖
标题:谁来解释下这段代码。
取消只看楼主 加入收藏
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
结帖率:100%
收藏
 问题点数:0 回复次数:3 
谁来解释下这段代码。
程序代码:
#include <iostream>
using namespace std;
void a()
{
    volatile int array[10];
    for (int i = 0; i < 10; i++)
        array[i] = i;   
}

void b()
{
    int array[10];
    for (int i = 0; i < 10; i++)
        cout << array[i];
}

int main()
{
    a();
    b();
}
搜索更多相关主题的帖子: 解释 
2011-11-10 16:30
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用beyondyf在2011-11-10 16:52:20的发言:

哪来的这种代码?这种旁门左道的东西,没什么意思。
函数a和b的变量形式是完全一样的,所以它们在栈内的相对顺序也是一样的。
由于C/C++对局部变量是不进行初始化的,所以b中array的偏移量刚好与原来a中array的位置一样,借此读出array中的残像。
调换一下其中一个函数中i和array的声明顺序,结果就会错位了,可以试试。



C/C++程序员应该对mem更为敏感。你的sense还不够。

你应该注意到volatile 这个keyword.
2011-11-10 16:55
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用beyondyf在2011-11-10 17:03:38的发言:

volatile这个关键字不是重点。防止编译器优化而已。就这段代码,有它没它都一样。
重点还是理解函数调用过程中对栈的使用。
还有,以后说话不要这么刻薄。是你在问别人,不是别人在问你。sense不够的是你。


我显然不是在问,是再反问。
2011-11-10 17:07
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用StarWing83在2011-11-10 17:02:09的发言:

无非就是不要让编译器把那个循环优化掉了而已


StarWing83 好久不见。

本来我也这么想的。

我check了下,发现不是这样的。
2011-11-10 17:08
快速回复:谁来解释下这段代码。
数据加载中...
 
   



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

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015311 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved