| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1538 人关注过本帖
标题:一个神奇的程序,也许你看懂了什么,但也许你也忽略了什么。
只看楼主 加入收藏
荡气回肠
Rank: 2
等 级:论坛游民
帖 子:33
专家分:40
注 册:2012-5-6
结帖率:66.67%
收藏
 问题点数:0 回复次数:20 
一个神奇的程序,也许你看懂了什么,但也许你也忽略了什么。
#include <stdio.h>

int main()
{
    int i = 0;
    int a[5];
   
    for(i = 0; i <= 5; i++)
    {
        a[i] = -i;
        printf("a[%d] = %d\n", i, a[i]);
    }
   
    getchar();
    return 0;
}


[ 本帖最后由 荡气回肠 于 2013-10-11 08:32 编辑 ]
搜索更多相关主题的帖子: include 
2013-10-09 22:06
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:0 
你是想说i取到5,导致数组元素和i互相覆盖?

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2013-10-09 22:27
没事学学
Rank: 2
等 级:论坛游民
帖 子:77
专家分:46
注 册:2013-3-28
收藏
得分:0 
差点把我电脑烧了
2013-10-09 22:31
荡气回肠
Rank: 2
等 级:论坛游民
帖 子:33
专家分:40
注 册:2012-5-6
收藏
得分:0 
回复 2楼 pauljames
嗯,是的。
   当循环变量i的值为5的时候将访问a[5],这个时候产生了一个数组越界的错误,并且程序产生了死循环。
   在C中a[5]其实等价于*(a+5),也就是说当i的值为5的时候,将对a+5这个内存空间进行赋值。在该程序中a+5这个内存空间正好就是i的地址,也就是说当i的值为5的时候,在for循环中的赋值语句其实等价于i=-i,即将i赋值为-5,因此i<=5永远无法满足。
2013-10-09 22:37
荡气回肠
Rank: 2
等 级:论坛游民
帖 子:33
专家分:40
注 册:2012-5-6
收藏
得分:0 
回复 3楼 没事学学
呵呵,应该没有那么严重吧。程序应该会一会儿快,一会儿慢。不稳定,最后直接死掉。
2013-10-09 22:39
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:0 
以下是引用没事学学在2013-10-9 22:31:57的发言:

差点把我电脑烧了
2013-10-09 22:41
踩不扁小强
Rank: 2
等 级:论坛游民
帖 子:46
专家分:39
注 册:2013-4-6
收藏
得分:0 
运行时死循环了,开始时不懂是怎么回事。看了大神们的评论明白了一点点。
2013-10-09 23:04
荡气回肠
Rank: 2
等 级:论坛游民
帖 子:33
专家分:40
注 册:2012-5-6
收藏
得分:0 
回复 7楼 踩不扁小强
给你看看这个,你就应该明白了。

在C语言中,每次函数调用都会使用掉一部分的栈空间,且函数返回后会自动释放掉这部分栈空间。那这些栈空间拿来干什么用呢?局部变量!C语言中的局部变量是在栈空间自动分配的,也就是说函数调用的时候所使用的栈空间就是用于创建局部变量的。
图片附件: 游客没有浏览图片的权限,请 登录注册

运行结果可以知道:局部变量i确实同数组中的第5个元素a[5]在栈上分配空间,因此a[5]就是i。
2013-10-09 23:17
yuxikuo
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-8-2
收藏
得分:0 
赞一个
2013-10-09 23:54
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
放个没分的帖子故弄玄虚,没什么神奇的

总有那身价贱的人给作业贴回复完整的代码
2013-10-10 08:01
快速回复:一个神奇的程序,也许你看懂了什么,但也许你也忽略了什么。
数据加载中...
 
   



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

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