关于++,--运算符

来源:百度知道 编辑:UC知道 时间:2024/07/08 07:50:42
void test(int n, int n1)
{
printf("n: %d\n", n);
printf("n1: %d\n", n1);

}
int main(int argc, char **argv)
{
int j = 0, k = 0;
test(j, j++);
test(k++, k);
return 0;
}
输出结果是什么?为什么?
gcc 中输出为 1 0 0 1
vc2005也是1 0 0 1

以上答案都不对
对于不同的编译器结果是不的
windows VC: 0,0,0,0
linux DEV C++: 1,0,0,0
原因:不同的编译器对处理,表达式的方法不同(如果再回上处理++的不同的话,结果会有很大的出入)
VC:0,0,0,0情况是因为它对后面++一律按先使用再加加.所以参数从右往左给值时都为0
DEV C++:部分按先使用再加加,参数从右往左给值时,认为J++是0,而到了J认为是1(认为J++完成了先使用再加加)所以会是1,0.对于K的情况一下
所以这种情况在工程中是应该严格避免的.

n:0
n1:0
n:0
n1:0

++,--放在变量后面时,是先取变量的值,再对变量进行加减.

++有两种,一种是在前面,一种是在后面。
你的这种J++是出现在后面就是说变量J在运算之后再自加1
如果是++J这种情况,那就是在运算之前先自加1。
例:
int j=20;
printf(j++); (指在输出之后在自加1)
printf(++j); (指在输出之前先自加1)
输出结果就是:
20
21

简单点说就是++在前的话你就先加个1自执行语句
而++在后就是先执行语句再加1
--一样的

0 1
1 0