【书上的】Turbo C 2.01环境下奇怪的自增自减问题

发布时间:2024-05-17 19:21 发布:上海旅游网

问题描述:

环境:Turbo C 2.01
书籍教程:
设变量a的值是5,则运算结果如下:
++a 结果a为6,运算式的值为6
a++ 结果a为6,运算式的值为5
--a 结果a为4,运算式的值为4
a-- 结果a为4,运算式的值为5
另:C语言规定,自左向右取尽可能多的符号组成运算符。

===================================================

书中例题:

#include <stdio.h>
main()
{
char c1='a', c2='A';
int n1=65, n2=97;
printf("++c1=%d --c1=%d c1++=%d c1--=%d\n", ++c1, --c1, c1++, c1--);
printf("n1+++n2=%d n1---n2=%d\n", n1+++n2, n1---n2);
}

书中给出的运行结果:
++c1=97 --c1=96 c1++=96 c1--=97
n1+++n2=161 n1---n2=-32
(上述结果我在TC2.01中测试过,确实是这样,但不应该是这样吗++c1=98 --c1=97 c1++=97 c1--=98 n1+++n2=162 n1---n2=-31)

\***************************************************************\

于是我把上面的例子改动了一下,如下:

#include <stdio.h>
main()
{
char c1='a', c2='A';
int n1=65, n2=97;
printf("++c1=%d --c1=%d c1++=%d c1--=%d ++c1=%d\n", ++c1, --c1, c1++, c1--, ++c1);
printf("n1+++n2=%d n1---n2=%d ++n1=%d\n", n1+++n2, n1---n2, ++n1);
}

这次程序运行结果和理论一样,如下:
++c1=98 --c1=97 c1++=97 c1--=98 ++c1=98
n1+++n2=162 n1---n2=-31 ++n1=66

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

这是怎么回事????

问题解答:

printf("++c1=%d --c1=%d c1++=%d c1--=%d\n", ++c1, --c1, c1++, c1--);
就这一句,你认为是按++c1,--c1,c1++,c1--顺序执行的?
编译器不是这样的,C语言的函数参数的取值,并没有定义要按顺序取,所以先执行的不一定是++c1,可能是c1--先执行,这跟具体的编译器有关.你只要理解++(--)的前后缀不同形式就足够了,而且,一般使用的时候在一个表达式里(或者一个函数参数中)不要连续使用自增自减操作.

热点新闻