
一道关于C++的题目,我算了15,但是答案是16,不解啊,求解释
2个回答
展开全部
我能说答案错了吗?
a+= a; b+= b; // 带入3和4,a=6,b=8
c = f1(a+b, ++b); // a+b的值是14,++b取自加后值,是9
f1(14, 9)
{
c = b%2; 取余是1
return a+c; // 14+1,返回15
}
a+= a; b+= b; // 带入3和4,a=6,b=8
c = f1(a+b, ++b); // a+b的值是14,++b取自加后值,是9
f1(14, 9)
{
c = b%2; 取余是1
return a+c; // 14+1,返回15
}
更多追问追答
追问
有一种说法是:在f1那括号了先算++b,然后再算a+b,这样就算到16了。你觉得对吗?
追答
啊,是我错了,好像和参数入栈有关系,原来关键点隐藏很深啊。这个涉及到__stdcall和__cdecl调用约定的问题,VC默认好像是__stdcall,参数传递从右到左,通过堆栈传递,故先执行了,++b,容我扯谎一下吧~
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询