为什么在显示后者'tot'时不考虑复合赋值?

时间:2016-01-12 19:59:39

标签: c compound-assignment

#include <stdio.h>

main() {

    int pro;        
    int dot;        
    int tot;        
    char prelude[] = "\nNow we shall do some simple mathematics\n\n";

    printf("%s", prelude);

    pro = 3;        
    dot = 5;
    tot = pro + dot;        
    printf("%d", tot);        
    dot += 23;        
    printf("\n%d\n", tot);        
    return 0;
}

1 个答案:

答案 0 :(得分:2)

因为C不提供自动数据绑定。当您使用赋值运算符(或您的情况下的加法赋值)时,您将在表达式的右侧分配语句的 VALUE

variable = statement表示statement将计算为某个值,并且此值将根据variable的数据类型分配给variable。< / p>

这意味着您要为该变量分配值,而不是实际陈述

更好地解释一下:

tot = pro + dot; 

执行以下操作:

  1. 我需要将我必须计算的内容分配给变量tot
  2. Something 是一个声明,pro + dot
  3. 此语句是一个附加项,一个需要两个操作数的操作。
  4. 操作数1是pro,它的计算结果为3.(表示C将替换 赞成3在该声明中)
  5. 操作数2为dot,评估为5。
  6. 评估所有操作数。
  7. 声明是:3 + 5;
  8. 此计算结果为8,为整数。
  9. 表达式已成为tot = 8;
  10. 将值8分配给tot。这意味着,转到内存地址  由tot表示的变量,并写入整数8(in  符合C标准/机器架构)。
  11. 如果你这样做

    dot += 23;
    

    C明白这一点:

    dot += 23; //  can be translated to `dot = dot + 23;'
    

    像以前一样:

    1. dot表示8,23表示23。
    2. 声明:8 + 23
    3. 语句评估为31. dot = 31;,意思是写 整数31到dot的记忆。
    4. 现在tot,不受此影响。为什么?因为tot是你记忆中的一个空间,它保存了值8.它不知道8是通过添加2个其他变量创建的。它只是8.所以改变其他变量不会影响这个变量。

      如果您执行dot += 23;,则表示您正在更改变量dot的内存,而不是tot的内存。

      您所期待的,称为数据绑定,并且是比C提供的更高级别的功能。