-2
#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;
}
4

1 回答 1

2

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

variable = statement表示statement将被计算为某个值,该值将variable根据variable的数据类型分配给。

这意味着您正在为该变量分配一个值,而不是一个实际的语句。

为了更好地解释它:

tot = pro + dot; 

执行以下操作:

  1. 我需要为变量分配一些我必须计算tot的东西。
  2. 某事是一个陈述,pro + dot
  3. 这个语句是一个加法,一个需要两个操作数的操作。
  4. 操作数 1 是pro,它的计算结果为 3。(意味着 C 将在该语句中将 pro 替换为 3)
  5. 操作数 2 是dot,它的计算结果为 5。
  6. 评估所有操作数。
  7. 声明是:3 + 5;
  8. 这计算为 8,一个整数。
  9. 表情变成了tot = 8;
  10. 将值 8 分配给tot。这意味着,转到由 表示的变量的内存地址tot,并写入整数 8(根据 C 标准/机器架构)。

如果你这样做

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

现在tot,不受此影响。为什么?因为tot是你记忆中的一个空间,它保存值 8。它不知道 8 是通过添加 2 个其他变量创建的。它只是8。所以改变其他变量,不会影响这个。

如果这样做dot += 23;,您正在更改变量的内存dot,而不是tot.

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

于 2016-01-12T20:11:49.993 回答