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

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

运行结果可以知道:局部变量i确实同数组中的第5个元素a[5]在栈上分配空间,因此a[5]就是i。
2013-10-09 23:17
荡气回肠
Rank: 2
等 级:论坛游民
帖 子:33
专家分:40
注 册:2012-5-6
收藏
得分:0 
回复 10楼 embed_xuel
难怪论坛这么死气沉沉的。。。。。。
2013-10-10 09:16
荡气回肠
Rank: 2
等 级:论坛游民
帖 子:33
专家分:40
注 册:2012-5-6
收藏
得分:0 
回复 11楼 tlliqi
何为论坛?是不是觉得我明知道答案还贴出来,有点儿装的感觉。如果你们要这么想的话,我只能说在这儿缺乏一种学习的氛围。问题的出来是供大家讨论的,希望大家分享自己的见解。分数在某种程度上是为了提起大家的兴趣,对回答者的肯定,但不是最终的目的。分数看得过重,或许也是在拿分数炫耀。
2013-10-10 09:28
荡气回肠
Rank: 2
等 级:论坛游民
帖 子:33
专家分:40
注 册:2012-5-6
收藏
得分:0 
回复 19楼 cwjsjesse
下面是等价关系:
a[5]<==>*(a + 5);
&a[5]<==>a + 5;

a + 5 是一种指针的运算:
p + n; <==> (unsigned int)p + n*sizeof(*p);

   当指针p指向一个同类型的数组的元素时:p+1将指向
当前元素的下一个元素;p-1将指向当前元素的上一
个元素。
2013-10-11 08:54
快速回复:一个神奇的程序,也许你看懂了什么,但也许你也忽略了什么。
数据加载中...
 
   



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

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