C语言里关于自增自减运算符的问题

请帮忙解释一下都会输出什么?求详细解答。
2024-10-31 20:33:17
推荐回答(3个)
回答1:

我在vc6·0上编写了一下 这是截图

首先是前两个7 因为i++是先赋值在进行加一运算,++i是先加一然后再进行赋值操作,所以a,b中储存着值是7,此时i的值是8

然后是后面两个7,同理 a为7,b为7,此时i为6

同理,-i++中因为++在后面 所以先输出-6,然后在把i加一 这是i变成了7

最后 根据输出格式 输出了  i=7;



回答2:

前缀加/减 与 后缀加/减 的不同 -- 在于表达式 里 的 值。

表达式 里, 前缀加 要先自增, 后使用。
表达式 里, 前缀减 要先自减, 后使用。
表达式 里, 后缀加 要先使用原值。出了表达式后 再自增。
表达式 里, 后缀减 要先使用原值。出了表达式后 再自减。

a=++i; 前缀加 要先自增, 后使用。执行: i=i+1; a=i ; ( i=7; a=7;)
b=i++; 后缀加 要先使用原值。出了表达式后 再自增。执行 b=i; i++; (b=7;i=8)
a=--i; 前缀减 要先自减, 后使用。i=i-1; a=i; (i=7;a=7)
b=i--; 后缀减 要先使用原值,执行. b=i.i=i-1; (b=7; i=6)
printf("%d\n",-i++); 后缀加 要先使用原值。出了表达式后 再自增. 打印 -i; (-6) 出了表达式 i=i+1;(i=7)
printf("i=%d\n",i); 打印 i=7

回答3:

第一行 i为6 a和b是垃圾值。
第二行a赋予i自增以后的副本a,a为7,而i为7,b被赋给i的副本,b为7,然后i又自增,i为8
打印出来a就是7 b是7 这个时候i是为8的
然后a被赋予i自减以后的副本,就是7,而i这时候为7,b又被赋予i的副本为7,然后i又自减为6。
再次打印,a为7,b为7,这时候i为6
下面根据优先级i++先算,那么,i++表达式的值为i的副本,那么就是6,然后负号表达式就是-6。这个-6传给printf,打印出-6,同时i也自减了,这个时候i为5。
再次打印,i为5。