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 */
说明:在测试1-1中,在while 语句中个, 先将n 的值进行判断是否等于0, 然后再进行自减操作。
故而, 第一个输出的值是 4.
/* 测试2 - 1 */
引用:
【1】《C 语言程序设计(C99版)》作者:陈良银,游红越,李旭伟
前置加, 是指在当前行程序执行之前, 将其执行后,再执行本行其他的操作。
后置加, 是指在当前行程序执行完后, 再执行后置加。
【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版)》作者:陈良银,游红越,李旭伟
相关文章推荐
- C语言中的前置++和后置++的区别
- 前置++和后置++的区别
- C语言中前置++和后置++的区别
- (转)前置++和后置++的区别
- C++再学习系列:前置++与后置++
- Java_语言基础:前置自增和后置自增
- Go语言学习7:Go语言为什么要用变量名后置的方式做声明
- 前置++及后置++在各种情况下的执行过程~~~~~带图片解释!!!!!!
- C++中前置++与后置++运算符重载
- [C++] C++的运算符重载(+、-、前置--、后置--,前置++,后置++、==)
- C++回顾之前置++、后置++、不等号!及赋值运算符重载
- (转)前置++和后置++的区别
- 对于C++中的前置++和后置++的看法
- 前置++为什么比后置++效率高
- C语言前置++,--,后置++,--的介绍
- 关于类重载前置++和后置++的骚操作
- 关于前置++和后置++的那么点纠结
- 前置++为什么比后置++效率高
- 项目二对象前置++,前置--;后置++,后置--
- 细谈C/C++中的前置++和后置++