| 网站首页 | 业界新闻 | 群组 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
雷速体育发帖软件开发QQ118000023C语言培训|一对一辅导|零基础学编程LightningChart 快速先进的.Net图表控件
共有 4756 人关注过本帖
标题:for语句循环,怎么不会跳出
只看楼主 收藏
孤独城堡
Rank: 1
等 级:新手上路
帖 子:52
专家分:9
注 册:2008-9-27
  得分:0 
回复 10楼 zhangduan
你先要运行creat0,得到n=13
2012-08-29 16:33
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
  得分:0 
函数creat0()返回的是局部数组的地址!

总有那身价贱的人给作业贴回复完整的代码
2012-08-29 18:26
刘根淼
Rank: 2
等 级:论坛游民
帖 子:13
专家分:39
注 册:2012-7-24
  得分:15 
首先你这个问题其实是你没有理解指针的用法而产生的
struct person *creat0()
{
    struct person p[13];
    int i;
    i=0;
    while(i<13)
    {
        n++;
        p[i].num=i+1;
        i++;
    }
    return p;
}
这个函数这样返回 p  这样能行吗???这是很大的错误!!!!
你后面出现的死循环就是因为这个大错误产生的。
再来告诉你后面是怎么出错的吧!
struct person *creat1(struct person p[])
{
    int i;
    for(i=0;i<13;i++)
    {
    p[i].code=j;
        j++;
        if(j==3) j=0;
    }
    return p;
}
这个地方确实是一个死循环,因为当你i = 12的时候,(在我的电脑上面是这样,在你电脑上的可能不是),
&p[12].code  ==  &i
懂这个意思吗?
这样意味当你
p[i].code=j;的时候改变了i的值,所以是个死循环,如果你会调试,你可以使用调试的时候查看地址,如果不会在那个函数里面加上这两句话,调用延时函数,去看看,地址是不是有相等的
    printf("the p[i].code \'s address is %x\n",&p[i].code);
        printf("the i \'s address is %x\n",&i);
2012-08-29 19:12
孤独城堡
Rank: 1
等 级:新手上路
帖 子:52
专家分:9
注 册:2008-9-27
  得分:0 
回复 13楼 刘根淼
请问为什么i=12时&p[i].code=&i
2012-08-30 12:39
刘根淼
Rank: 2
等 级:论坛游民
帖 子:13
专家分:39
注 册:2012-7-24
  得分:0 
那是因为你的p是从栈上返回来的,然后再进入函数里面,它把这个地址又分配给了i,所以又&p[i].code=&i,不要问我,为什么是这样分配内存?你要注意的不是这个问题,你要注意的是不能返回栈上的地址,这才是你错误的原因!!
2012-08-30 14:16
孤独城堡
Rank: 1
等 级:新手上路
帖 子:52
专家分:9
注 册:2008-9-27
  得分:0 
回复 15楼 刘根淼
那请问一下栈是什么,我在书上没有看过(也有可能忘记了)
2012-08-30 17:38
刘根淼
Rank: 2
等 级:论坛游民
帖 子:13
专家分:39
注 册:2012-7-24
  得分:0 
那你自己摸索吧!这个继续努力吧
2012-08-30 18:19







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

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