求大神详解这道题答案为什么是28,a=4什么时候用,不是太懂,求详解
1个回答
展开全部
答:此段程序虽短,却牵涉许多概念问题,试分析如下:
第一步:程序开始时主函数将全局变量a=4的值赋值给s,以i=0调用函数f,在函数f中,局部静态变量a被赋值5(局部静态变量a在if及else程序段是不可见的),if(n%2)为0(即假),所以执行else,在else分支中,全局变量a被赋值7,t+=a++使得t=7,最后一个语句return t+a++用的是局部静态变量a=5的值,使得t=12并将此值返回主函数,s+=f(i)使得s=16,而其中a++使得局部静态变量a=6;
第二步:主函数以i=1调用函数f,在函数f中,局部静态变量a因为在整个程序运行期间初始化时只能被赋值一次使得程序跳过static int a=5语句,if(n%2)为1(即真),所以执行if程序段,此段程序将全局变量a赋值为6,t+=a++使得t=6,同样return t+a++用的是局部静态变量a=6的值,所以t=12并将此值返回主函数,s+=f(i)使得s=28,而其中a++使得局部静态变量a=7。
第三步:打印s=28的值,程序结束。
好长时间没有看c了,以上分析难免有错误。
第一步:程序开始时主函数将全局变量a=4的值赋值给s,以i=0调用函数f,在函数f中,局部静态变量a被赋值5(局部静态变量a在if及else程序段是不可见的),if(n%2)为0(即假),所以执行else,在else分支中,全局变量a被赋值7,t+=a++使得t=7,最后一个语句return t+a++用的是局部静态变量a=5的值,使得t=12并将此值返回主函数,s+=f(i)使得s=16,而其中a++使得局部静态变量a=6;
第二步:主函数以i=1调用函数f,在函数f中,局部静态变量a因为在整个程序运行期间初始化时只能被赋值一次使得程序跳过static int a=5语句,if(n%2)为1(即真),所以执行if程序段,此段程序将全局变量a赋值为6,t+=a++使得t=6,同样return t+a++用的是局部静态变量a=6的值,所以t=12并将此值返回主函数,s+=f(i)使得s=28,而其中a++使得局部静态变量a=7。
第三步:打印s=28的值,程序结束。
好长时间没有看c了,以上分析难免有错误。
更多追问追答
追问
亲,静态变量和全局变量究竟是如何区分的呀,例如返回的t+a++为什么用静态变量的值啊
麻烦亲了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询