您的位置:首页 > 其它

C 语言前置++ 与后置++

2011-09-18 14:03 232 查看
偶然间想测试一下++ 的前置与后置问题。 也算是在找工作前做好复习。

前置加, 是指在当前行程序执行之前, 将其执行后,再执行本行其他的操作。

后置加, 是指在当前行程序执行完后, 再执行后置加。

【1】运算符“++”和“--”与其他运算符的不同点在于,他们既可以用于前缀运算(++ count, -- count), 也可以用于后缀          运算(count++, count--)。

         这两种情况,其效果都是使得变量count 增加1 或者减少 1 。 但其意义有很大的不同。

         表达式++ count, 表示先将count 的值自增1 , 然后再取自增后的结果值使用。

         表达式count++, 则表示先取count 的值使用,然后count 的值再自增1 。

         这意味着++ count 和 count++ 虽然对count 的操作结果相同,但是在使用count 的值这点上不一样。下面通过例            子来说明,更为直观。

         比如:

                       int count = 5;

                       i = count++;        // 操作:先将count 的值5 取出赋值给i ,然后count 再自增。

                                                     执行结果为: i = 5, count = 6

                       int count = 5;

                       i = ++ count;       // 操作:先将count 的值自增1, 变成6, 然后取当前值9 赋值给i

                                                     执行结果为: i = 6, count = 6

         注意:当遇到i+++j 这样的表达式时, 如何来区分他所表达的意思呢?究竟i 先后缀自增1 以后再与j 相加,还是j                     先前缀自增1后再与i 相加呢? 编译器在处理他们的时候使用了一种叫做“贪心法”的算法——它总是从左                       向右取尽可能多的有意义的字符。这样的话,取道i++ 就可以了, 他是有意义的,而i+ ++j 就没有意义                       了。所以i+++j 等价于(i++) + j


                     

                     自增和自减运算符只能用于作用于变量,不能作用于表达式。像(i+j)++ 这样的表达式是非法地。 i++ +                        ++j 同样非法,按照“贪心法”来理解,他所表达的意思应该是( (i++) ++) + j, 而i++ 自然是一个算术表达                      式,那么(i++)++ 的最后一个++ 就是作用在表达式上的了, 当然是非法的。

下面就是一些举例,来进一步说明++ 在程序中的使用。

/*           测试1 - 1              */

#include <stdio.h>

int main()
{
int n = 5;
while(n--) // 先判断, 再减
{
printf("%d\n", n);
}

return 0;
}



说明:在测试1-1中,在while 语句中个, 先将n 的值进行判断是否等于0, 然后再进行自减操作。

           故而, 第一个输出的值是 4.

/*             测试2 - 1          */
#include <stdio.h>

int main()
{
int a;
a = 5;
// (a++) += a;  // 报错

// (++a) += a;	// 报错

printf("*****************\n");
a += (a++);
printf("a = %d\n", a);

printf("*****************\n");
a = 5;
a += (++a);
printf("a = %d\n", a);

printf("*****************");

return 0;
}




引用:

【1】《C 语言程序设计(C99版)》作者:陈良银,游红越,李旭伟
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息