| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1551 人关注过本帖
标题:【有关静态变量赋值问题求解】
取消只看楼主 加入收藏
邹阳
Rank: 6Rank: 6
等 级:侠之大者
威 望:4
帖 子:124
专家分:402
注 册:2015-10-8
结帖率:73.68%
收藏
已结贴  问题点数:20 回复次数:1 
【有关静态变量赋值问题求解】
  首先,本人在上课过程中接触到了一道题,如下:
#include "stdio.h"
int f(int n)
{
    static int k,s;
    n--;
    for(k=n;k>0;k--)
    {
        s+=k;
    }
    return s;
}
void main()
{
    int k;
    k=f(2);
    printf("%d,%d",k,f(k));
}

  执行过代码后得出的结果是:“1,1”,询问过老师得知,static静态变量在定义并赋值后下面就不能再次赋值了,同时,如果在定义静态变量时未赋值,那么此变量默认被赋值为0。
那么,问题来了,为什么打印的第二个数字是1,而不是0呢?
我的疑惑点:通过执行k=f(2)时,向调用函数f传进了一个"2"进行计算并通过返回值s传出结果赋值给k。我们可以看到s在调用函数中被定义为静态变量,既然定义时未赋值,那么s不就默认被赋值为0了吗?这算不算赋了初值,既然赋了初值,为什么在把k=1传入f()运算时因为不符合for()条件而跳过后会再次返回一个1呢?此时此刻s不是0吗?
  当然,我明白静态变量虽然不能被二次赋值,但是静态变量是可以进行运算的,但在第一次传值运算时,返回值s=1,第二次返回值s为什么仍然等于1呢?1不是s的计算值吗?如果s一直等于1,这不就算是把1赋值给s了吗?
  问题可能赘述,望解答。
搜索更多相关主题的帖子: include return 
2017-04-08 16:59
邹阳
Rank: 6Rank: 6
等 级:侠之大者
威 望:4
帖 子:124
专家分:402
注 册:2015-10-8
收藏
得分:0 
回复 2楼 renkejun1942
嗯嗯,问题得到解决了,谢谢。

I'm a new comer
2017-04-08 21:35
快速回复:【有关静态变量赋值问题求解】
数据加载中...
 
   



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

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