a++具体在什么时刻才执行+1这一步啊
<div class="blockcode"><blockquote><p></p><p>#include<stdio.h>
void main()
{
int a=0;
printf("%d %d",a++,a);
} // 00</p><p>
</p><p>
</p><p>#include<stdio.h>
void main()
{
int a=0;
printf("%d",(a++,a));
} // 1</p><p>
</p><p>//为什么第一个程序里的第二个a是0,而第二个程序里的第二个a是1呀</p>
之前看到过说是整个表达式求值之后再自加,那int i=3;k=(i++)+(i++)+(i++);k=9i=6 这种可以理解,那按理说(a++,a),应该在逗号运算符执行完了a才+1,那逗号运算的结果不应该是0吗:cry 先求解a++,再求解a,逗号表达式求解是顺序执行完成之后,返回第二个表达式的值,所以是1 额,我后来理解为,+1运算优先顺序比赋值运算低但比逗号运算高,是这个意思吗 xjc_621105 发表于 2014-12-15 17:33
先求解a++,再求解a,逗号表达式求解是顺序执行完成之后,返回第二个表达式的值,所以是1
额,我后来理解为,+1运算优先顺序比赋值运算低但比逗号运算高,是这个意思吗
其实 你可以这样理解的 a++ 分解成 先 a=a 然后a=a+1,这其中a=a+1 是执行下个语句要用的 而不是当前要用到的所以在 你的第一个程序是 01 第二个程序是 1 就看我这个
对比 参悟 然后懂了
#include<stdio.h>
int main()
{
{ int a=0;
printf("%d\n",(a++ + a))
}
{
int a = 0;
printf("%d\n",(a++,+a));
}
{
int a = 0;
printf("%d\n",(++a + a));
}
{
int a = 0;
printf("%d\n",(++a,+a));
}
system("pause");
return 0;
}
a++是先用后加++a是先加后用 我顶你,实际上,这个问题,你只要自己debug调试一下就知道了 我记得《C++PRIME》里有关于这点的介绍,好像i++这种情况与编译器有关,而且关系到拷贝的问题,所以一般都建议用++i这种形式。具体我忘了,你可以看看书。 学习学习 GRRRARD 发表于 2014-12-18 17:42
我记得《C++PRIME》里有关于这点的介绍,好像i++这种情况与编译器有关,而且关系到拷贝的问题,所以一般都 ...
大神们都看过primer 啊{:9_239:} 我看看是不是我的错,还是不是吧 我的鱼币,要鱼币,请给我吧 我知道你不知道我知道 赵晓玉 发表于 2014-12-17 22:56
a++是先用后加++a是先加后用
想问的就是加和用的分界点在哪 只為不段前行 发表于 2014-12-17 12:28
其实 你可以这样理解的 a++ 分解成 先 a=a 然后a=a+1,这其中a=a+1 是执行下个语句要用的 而不是当前要用到 ...
执行逗号运算不算下一个语句吧 GRRRARD 发表于 2014-12-18 17:42
我记得《C++PRIME》里有关于这点的介绍,好像i++这种情况与编译器有关,而且关系到拷贝的问题,所以一般都 ...
额,自己找了个理解方式
一般情况(逗号不当运算符时)自加发生在下一个语句中即以分号做分界线,逗号作运算符时是个奇葩,出现这个就以逗号运算符做是否自加的分界线,vc中printf输出涉及自加时从右往左运算,貌似都能解释清楚了:lol:
d=8;
printf("%d %d %d %d %d\n",--d,++d,d++,-d++,-d--);//8,9,8,-8,-8
ganlei00 发表于 2014-12-20 09:32
我知道你不知道我知道
你说你知道我就知道你知道了:titter: hapizz 发表于 2014-12-17 22:20
就看我这个
对比 参悟 然后懂了
恩,用我想的自加发生在逗号运算前其他所有运算后可以解释通,谢啦:lol:
页:
[1]
2