C中静态变量static的一道题

intfunc(void){staticintcounter=2;cout<<counter<<endl;counter=counter>>1;returncounter... int func(void)
{

static int counter=2;
cout<<counter<<endl;

counter=counter>>1;

return counter*=++counter;
}
int main()
{

int answer;

answer =func()+func()*func();
cout<<answer<<endl;
}

输出2 4 9 229
求最后答案的解题过程!
展开
 我来答
亚马逊选品管家
2013-09-25 · TA获得超过643个赞
知道小有建树答主
回答量:805
采纳率:100%
帮助的人:286万
展开全部
counter=counter>>1;

return counter*=++counter;

首先counter=counter>>1;是将counter的值右移一位,即除以2
然后counter*=++counter,首先计算表达式右面的值,即++counter,++在左面是先++再参与计算,而且counter*=++counter等价于counter = counter * (++counter);
所以经过一次函数计算,返回值为(当前值/2 + 1)的平方,所以算吧
answer =func()+func()*func();

先计算func()=4,在计算func()=9,最后一次计算是25,

answer = 4 + 9 * 25;
等于229
追问
为什么到25的时候停止运算?
追答
。。。
有三个func呀,调用了三次,当然到25就停止了
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式