lf774733240 发表于 2015-7-31 22:06

静态变量a的值

求详细过程
#include<stdio.h>
int a=2;
int f(int n)
{
        static int a=3;      
        int t=0;
        if(n%2)
        {
                static int a=4;
                t+=a++;            
        }
        else
        {
                static int a=5;
                t+=a++;
        }
        return t+a++;
}
int main()
{
        int s=a,i;               
        for(i=0;i<3;i++)         
        {
                s+=f(i);
        }
        printf("%d\n",s);
        return 0;       
}

lf774733240 发表于 2015-7-31 22:06

在线等!!!!!!!!!!!

菜鸡葫芦娃 发表于 2015-7-31 22:13

判断n除以2的余数是1还是0是1的话a=4 是0的话a=5循环到最后参数的值是2 2除以2余数为0所以a=5

lf774733240 发表于 2015-7-31 22:28

紧肛互撸娃M 发表于 2015-7-31 22:13
判断n除以2的余数是1还是0是1的话a=4 是0的话a=5循环到最后参数的值是2 2除以2余数为0所以a=5

结果29是怎样来的

sunbeam_ 发表于 2015-8-2 00:17

从主函数中看 要求的是 2+f(0)+f(1)+f(2)
再看f(n)这个函数里面有三个a   设第一个a 为 a ; 第二个a 为a1 ;第三个a 为a2
a1 和 a2 都只在其各自if分支里有效所以最后返回值是第一个a
下面我们来计算 :
f(0):t+=a2++---->t等于5,a2自增,a2等于6
return t+a++   ---->   返回t+a等于8(5+3) ,a自增 等于4
f(0)=8

f(1):

t+=a1++   ------> t等于4,a1自增, a1等于5
return t+a++   -----> 返回t+a等于8(4+4),a自增 等于5
f(1)=8

f(2):
t+=a2++   ------->t等于6 ,a2自增
return t+a++   ----->返回t+a等于11(6+5)

所以等于 2 + 8 + 8 + 11 = 29

FantasyOwl 发表于 2015-8-2 00:28

大神们在说啥呢??怎么我一个字也看不懂

魔术使nqy 发表于 2015-8-2 08:27

卧槽,我跟楼上的一样,什么都不懂-_-#

kelamoyujuzhen 发表于 2015-8-2 09:00

好复杂,刚学C语言,看不懂

lf774733240 发表于 2015-8-2 09:37

sunbeam_ 发表于 2015-8-2 00:17
从主函数中看 要求的是 2+f(0)+f(1)+f(2)
再看f(n)这个函数里面有三个a   设第一个a 为 a ; 第二个a 为 ...

++不是比+=的优先级更高吗?比如f(0),先a2自增,为6,然后t=t+(a++),t=0+6=6 吗?

sunbeam_ 发表于 2015-8-2 10:46

lf774733240 发表于 2015-8-2 09:37
++不是比+=的优先级更高吗?比如f(0),先a2自增,为6,然后t=t+(a++),t=0+6=6 吗?

确实是优先级更高,但你要分清楚 a++ 和 ++a
a++是先代入计算再自增
++a是先自增再代入计算
页: [1] 2
查看完整版本: 静态变量a的值