| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 855 人关注过本帖
标题:盼望高手帮我指点这个程序!
只看楼主 加入收藏
lele2010
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:84
专家分:121
注 册:2010-1-23
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
盼望高手帮我指点这个程序!
#include<stdio.h>
void main()
{
    int a=1,b=2;
    printf("%d,",f(a,b));
    printf("%d",f(a,b));
}
f (int x,int y)
{
    static int a=3,b=4;
    a+=b*2;
    b=a+x+y;
    return b;
}

运行出来是14,42;
14  我看的懂
但42 我就看不懂了!盼望高手向我解释!谢谢!

怎么想42都好像不太对!但编译的结果却就是42.奇怪了!我错在哪呢?

[ 本帖最后由 lele2010 于 2010-2-2 21:10 编辑 ]
2010-02-02 18:48
ce_hqhan
Rank: 1
等 级:新手上路
帖 子:4
专家分:5
注 册:2010-2-2
收藏
得分:5 
你了解一下 static
http://blog.
希望对你有帮助。
2010-02-02 19:46
神秘人
Rank: 2
等 级:论坛游民
帖 子:19
专家分:38
注 册:2010-1-31
收藏
得分:1 
“static表示静态变量”
是解决你这个问题的KEY。

人不知而不愠,不亦君子乎?
2010-02-02 19:59
hejirong
Rank: 2
等 级:论坛游民
帖 子:29
专家分:84
注 册:2010-1-31
收藏
得分:9 
程序代码:
#include<stdio.h>                    // 本人注解:

f (int x,int y)
{
    static int a=3,b=4;
    a+=b*2;
    b=a+x+y;
    return b;
}

void main()
{
    int a=1,b=2;
    printf("%d,",f(a,b));        //返回b的值:14,运算后,a的值为11。转入"printf("%d",f(a,b));"的运算  > >

    printf("%d",f(a,b));        //可知:x=11,b=14,a=3,b=4;计算:a+=b*2;b=a+x+y;return b;返回 b 的值:48.

}


^^^^^^O(∩_∩)O~
2010-02-02 21:04
xinjinlong
Rank: 3Rank: 3
来 自:河南南阳
等 级:论坛游侠
帖 子:61
专家分:117
注 册:2010-1-19
收藏
得分:2 
void main()
{
    int a=1,b=2;
    printf("%d,",f(a,b));//a=11,b=14
    printf("%d\n",f(a,b));//a=28+11=39,b=39+3=42
}
第一次调用完后a,b的值已经发生变化,主函数的a,b和子函数a,b虽然是同样的名字但不是同一个数,这就是局部变量的范围
第二调用时a,b的值就是第一次调用后的值,这就是静态变量的作用
2010-02-02 21:07
fionawings
Rank: 1
等 级:新手上路
帖 子:4
专家分:6
注 册:2010-2-3
收藏
得分:1 
static int a=3,b=4;只定义一次
第二次调用f (int x,int y)函数,使用的a,b值是第一次调用后改变成的值
2010-02-03 13:33
Devon_Ye
Rank: 4
来 自:广东
等 级:业余侠客
帖 子:124
专家分:282
注 册:2010-1-7
收藏
得分:1 
第一次调用子函数f(x,y),实参为1,2.
a=a+b*2=3+8=11;
b=11+1+2=14;
第二次调用子函数f(x,y),实参还是1,2.
但由于a,b是静态变量。
所以此时,a=11,b=14;
a=11+14*2=39;
b=39+1+2=42;

函数输出14;42;
2010-02-04 09:29
许大牛
Rank: 1
等 级:新手上路
帖 子:6
专家分:1
注 册:2010-2-3
收藏
得分:1 
你可以好好看一下static的定义,他只定义了一次,所以只应用一次,也就是只用来计算一次,
第一次调用子函数f(x,y),因为static的定义,此时a=3,b=4,所以a=a+b*2=3+8=11;
第二次调用时a=1,b=2,所以b=11+1+2=14;
第二次调用子函数f(x,y),此时,a=11,b=14;所以a=11+14*2=39;
第二次时a=1,b=2,所以b=39+1+2=42;
2010-02-04 18:47
快速回复:盼望高手帮我指点这个程序!
数据加载中...
 
   



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

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