#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;
}
问问题
56 次
1 回答
2
因为 C 不提供自动数据绑定。当您使用赋值运算符(或您的情况下的加法赋值)时,您正在分配表达式右侧的语句的VALUE 。
variable = statement
表示statement
将被计算为某个值,该值将variable
根据variable
的数据类型分配给。
这意味着您正在为该变量分配一个值,而不是一个实际的语句。
为了更好地解释它:
tot = pro + dot;
执行以下操作:
- 我需要为变量分配一些我必须计算
tot
的东西。 - 某事是一个陈述,
pro + dot
。 - 这个语句是一个加法,一个需要两个操作数的操作。
- 操作数 1 是
pro
,它的计算结果为 3。(意味着 C 将在该语句中将 pro 替换为 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 提供的更高级别的功能。
于 2016-01-12T20:11:49.993 回答