C语言中的a++与++a的速记理解

     关于a++与++a理解时容易烦迷糊(未定义行为,undefined behavior), 但在用时只要避免复杂难懂的表达式时,基本上都不会出错。如果需要全部理解二者区别,需要读2者的汇编语言。

下面谈一下自己的速记理解:

第一种

a++ ,名 后自增,因为加号在后面嘛,这个好理解,那往下一步思考,为什么叫后自增呢, 因为是先赋值,在自增运算。即下面b=a++,与下面等价:

int a = 1 ;

// b = a++ ; 与下面等价


b = a;  //先赋值
a = a +1;//后自增

a = 1 ; b = a++;执行后,最终 b为1 ,a为2。以后看到a++,就叫后自增就好了,然后在思考为啥叫,这样在宏观上就基本上理解了。

同理思考++a

++a,名 前自增,因为加号在前面嘛,这个好理解,那往下一步思考,为什么叫前自增呢, 因为是先自增运算,在进行赋值运算,在。即下面b=++a,与下面等价:

int a = 1 ;

// b = ++a ; 与下面等价


a = a +1;//先自增
b = a;  //后赋值

故 a = 1 ; b = ++a; 执行后,最终 b为2 ,a为2。  注意2个操作后的结果不同,前自增b为1,后自增b为2。以后看到++a,就叫前自增就好了。。。。

第2种

第二种比较绕一点,没有第一种那么直观,所以直接上代码了

int a = 5;
 
// int b 相当于:5 + 6 + 7 = 18      
     

 int b = a++ + a++ + a;
// 执行完a++[运算]后a进行自增,不是执行完此条完整语句后a才自增,而是在同一条语句中a++以后的a都是自增以后的值  
 // a经过两次自增,所以它的值是7
int a = 5;
 
// int b 相当于:6 + 7 + 7 = 20      
     

 int b = ++a + ++a + a;
 * a先进行自增,然后执行++a[元运算表达式]时.并且在同一条语句中,++a以后的a的值,都是自增以后的值
 // a经过两次自增,所以它的值也是7

  进一步学习

上面讨论了基本数值类型,但如果是类情况呢。前自增比后自增速度快很多。

在程序开发中,++i 与 i++的区别在哪里? - 阿布的回答 - 知乎 https://www.zhihu.com/question/19811087/answer/2288880158

  • 42
    点赞
  • 109
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值