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

本文详细解析了C语言中的前置与后置自增运算符的区别及其应用场景。通过具体的代码示例,展示了如何正确使用这些运算符,并解释了它们在表达式中的行为差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

偶然间想测试一下++ 的前置与后置问题。 也算是在找工作前做好复习。
前置加, 是指在当前行程序执行之前, 将其执行后,再执行本行其他的操作。
后置加, 是指在当前行程序执行完后, 再执行后置加。

【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版)》作者:陈良银,游红越,李旭伟


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值