除了上述的基本表达式之外,C语言还提供了许多其他高级语言所没有的表达式,也因为C语言有这些表达式,从而使C语言更具有弹性,但也造成初学者的困扰。
C语言提供了两个一般高级语言所没有的表达式:一个是递增,它的表示方式为“++”;另一个递减,它的表示方式为“- -”。
“++”会主动将某个操作数加1。
“- -”会主动将某个操作数减1。
实例1: 有一C语言指令如下:
i++;
假设执行指令前i=2,则执行指令后i=3。
实例2: 有一C语言指令如下:
i--;
假设执行指令前i=2,则执行指令后i=1。
++和- -还有一个很特殊的地方,就是它们既可放在操作数之后,例如i++,这种方式,我们称后置(postfix)运算,如上述两个例子所示。也可以将它们放在操作数之前,例如++i,这种运算方式,我们称前置(prefix)运算。
实例3: 有一C语言指令如下:
++i;
假设执行指令前i=2,则执行指令后i=3。
实例4: 有一C语言指令如下:
--i;
假设执行指令前i=2,则执行指令后i=1。
从上述实例来看,好像前置运算和后置运算并没有太大的差别,其实不然,它们之间仍然是有差别的。
所谓的前置运算,是指在使用这个操作数之前先进行加一或减一的动作。至于后置运算,则是指在使用这个操作数之后才进行加一或减一的动作。实例5:有一C语言指令如下:
s=++i+3;
假设执行指令前s=3,i=5,则执行指令时,计算机会先做i加1,所以i变为6,然后再进行运算,所以s的值是9。
实例6: 有一C语言指令如下:
s=3+i++ ;
假设执行指令前s=3,i=5,则执行指令时,计算机会先执行3+i,所以s的值是8,然后i本身再加1,所以i的值是6。
程序实例 ch2_13.c:前置运算与后置运算的应用。
假设有一运算指令如下:
i=i+1;
在C语言中有一表达式,可将它改写成:
i+= 1;
由于这种表达式,对2-5节中所述的所有基本算术运算都有效,所以可将上述表达式写成如下表达式:
e1 op= e2;
其中,e1表示操作数,e2也是操作数,而op则是指2-5节中所述的运算符。上式的意义就相当于:
e1=(e1) op (e2);
注意,e2表达式的括号不可遗漏。下面是这种表达式符号的使用。
实例1: 有一C语言指令如下:
a *= c;
假设执行指令前a=3,c=2,则执行指令后c=2,a=6。
使用这种运算时,有一点必须注意,假设有一指令如下:
a+= c*d;
则C在编译时会将上述表达式当作下列指令,然后执行。
a=a+(c*d);
实例2: 有一C语言指令如下:
a *=c+d;
假设执行前,a=3,c=2,d=4,由于上述表达式相当于a=a*(c+d),其中c+d等于6,3*6=18,所以最后可得a=18。
程序实例 ch2_14.c:特殊表达式的应用。
也可将上述特殊表达式应用在位运算指令,未来章节会做完整说明。