年年有"余"

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3076|回复: 1

复合赋值是如何展开的

[复制链接]
  • TA的每日心情

    2024-10-15 10:05
  • 签到天数: 372 天

    [LV.9]以坛为家II

    发表于 2014-2-21 20:33:29 | 显示全部楼层 |阅读模式
    用一个例子来说明问题:
    1. #include <stdio.h>
    2. int main() {
    3.    
    4.     int a = 20;
    5.     int b = 20;    //a与b的值是相等的
    6.    
    7.     a += 30 + 40;
    8.     b = b + 30 + 40;    //b按照a复合赋值的方式进行展开
    9.     printf(" a=%d\n b=%d\n", a, b);    //将两者输出进行对比
    10.    
    11.     int c = 20;
    12.     int d = 20;    //c与d的值是相等的
    13.    
    14.     c *= 30 + 40;
    15.     d = d * 30 + 40;    //d按照c复合赋值的方式进行展开
    16.     printf(" c=%d\n d=%d\n", c, d);    //将两者输出进行对比
    17.    
    18.     return 0;
    19. }
    复制代码
    输出结果为:
    1. a=90
    2. b=90
    3. c=1400
    4. d=640
    复制代码

  • TA的每日心情

    2024-10-15 10:05
  • 签到天数: 372 天

    [LV.9]以坛为家II

     楼主| 发表于 2014-2-21 20:39:36 | 显示全部楼层
    从以上结果来看,a与b的结果是相等的,但c与d的结果是不等的
    说明实际复合运算的展开方式与上述的写的不尽相同,从c的结果来看c *= 30 + 40展开是c = c * (30 + 40),即c *= 30 + 40实际上应该是c *= (30 + 40)那么a += 30 + 40为什么没有问题呢,因为“+”与“-”的优先级比较低,展开a = a + 30 + 40与a = a + (30 + 40)实际上没什么两样,所以两者输出的结果是相同的。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    手机版|小黑屋|Archiver|iOS开发笔记 ( 湘ICP备14010846号 )

    GMT+8, 2024-11-22 06:28 , Processed in 0.049902 second(s), 23 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表