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

最佳答案

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

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

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

为了更好地解释它:

tot = pro + dot;


执行以下操作:


我需要将必须计算的内容分配给变量tot
pro + dot是一个声明。
该语句是一个加法运算,它接受两个操作数。
操作数1为pro,其值为3。(意味着C将替换
那个语句中有3的亲)
操作数2为dot,其值为5。
对所有操作数进行求值。
该语句是:3 + 5;
计算结果为8,一个整数。
表达式已变为tot = 8;
将值8分配给tot。这意味着,转到内存地址
 的tot表示的变量,并写入整数8(在
 符合C标准/机器架构)。


如果你这样做

dot += 23;


C明白这一点:

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


像以前一样:


dot表示8,23表示23。
陈述:8 + 23
该语句的值为31。dot = 31;,表示将
整数31至dot的内存。


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

如果执行dot += 23;,则将更改变量dot的内存,而不是tot的内存。

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

关于c - 为什么显示后一个“tot”时不考虑复合分配?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34752722/

10-12 16:15