| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 738 人关注过本帖
标题:一个函数的问题,百思不得其解 。请各位帮我看看
只看楼主 加入收藏
飞扬冲天
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:86
专家分:122
注 册:2011-10-21
结帖率:66.67%
收藏
 问题点数:0 回复次数:4 
一个函数的问题,百思不得其解 。请各位帮我看看
/*   file1.c    */
#include "file2.c"
#include "file3.c"
#include
int i=1;
next()
{ return(i++);}
void main()
{
    int i,j;
    i=reset();
    for(j=1;j<=3;j++)
    {
        printf("i=%d\t  j=%d\t",i,j);
        printf("next()=%d\t",next());
        printf("last()=%d\t",last());
        printf("now(i+j)=%d\t",now(i+j));
        printf("\n");
    }
 }

/*   file2.c    */
static int i=10;
last()
{ return(i-=1);}
now(int i)
{
    static int j=5;
    return(i=j+=++i);
}


/*   file3.c   */
extern int i;
reset()
{ return(i);}


书上说程序结果是:
i=1    j=1    next()=1    last()=9    new(i+j)=8
i=1    j=2    next()=2    last()=8    new(i+j)=12
i=1    j=3    next()=3    last()=7    new(i+j)=17


怎么i的值一直是1啊?虽然main函数里重新定义了一个i,但这儿有一个 i=reset();,而且file3.c里的i明明说extern说明了的啊?高手求解!!!

还有,怎么我用vc 6.0编译的时候他会给我报错:
file1.c(4) : error C2374: 'i' : redefinition; multiple initialization
file2.c(1) : see declaration of 'i'
file2.c的i是static的啊...搞不懂...只好重新改了个 名字。

高手帮帮我吧...
搜索更多相关主题的帖子: include return 
2011-11-26 09:59
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:0 
就近原则
变量解析时 首先在当前作用域找其声明,如没有在上一级作用域找其声明,
如没有,再在上上一级作用域找其声明,依次类推
2011-11-26 10:49
飞扬冲天
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:86
专家分:122
注 册:2011-10-21
收藏
得分:0 
回复 楼主 飞扬冲天
还是不咋懂...那个reset(i)应该是找外部变量那个i啊....next();  return(i++);后i不就会变成2和3了吗?....
2011-11-26 11:59
luchar
Rank: 9Rank: 9Rank: 9
来 自:南京
等 级:蜘蛛侠
帖 子:279
专家分:1263
注 册:2011-11-3
收藏
得分:0 
因为main函数是在file1里,有个int i=1;所以第一次的时候i=reset函数的时候,i是1,然后j也是1;

return(i++);这个也是在file1里面,i也是1,而返回的是i++,这里是先取i的值,然后i自增1,所以整个return(i++);也是1;

last函数在file2里,file2里定义了一个i=10,所以此时优先调用i为10,所以返回i-=1,就是返回了个为9的i,i就成了9;

最后调用now(i+j)的时候,i还是file1里面的1,j是1,在file2里面调用now(2),在
now(int i)
{
    static int j=5;
    return(i=j+=++i);

这里,i为2,j为5,return里面++i先算,则得到i为3,然后是j+=i,j是5,i是3,得到j=8,最后计算i=j=8,所以i就得到了8。由于在file2里面的i和j都是static类型的,在后面的计算中要注意下
2011-11-26 15:11
飞扬冲天
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:86
专家分:122
注 册:2011-10-21
收藏
得分:0 
回复 4楼 luchar
嗯,终于明白了,谢谢了哈。
2011-11-28 13:01
快速回复:一个函数的问题,百思不得其解 。请各位帮我看看
数据加载中...
 
   



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

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