#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/