#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 に答える
2
C は自動データバインディングを提供しないためです。代入演算子 (またはあなたの場合は加算代入) を使用すると、式の右側にステートメントのVALUEが代入されます。
variable = statementはあるstatement値に計算され、この値はのデータ型variableに従って に割り当てられることを意味します。variable
これは、その変数に実際のステートメントではなく、値を割り当てていることを意味します。
それをよりよく説明するには:
tot = pro + dot;
次のことを行います。
- 計算しなければならないものを variableに代入する必要があります
tot。 - 何かがステートメントです
pro + dot。 - このステートメントは加算であり、2 つのオペランドを取る演算です。
- オペランド 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 が保持されます。2 つの他の変数を追加して 8 が作成されたことはわかりません。ちょうど 8 です。他の変数を変更しても、この変数には影響しません。
変更すると、変数のメモリではなくdot += 23;、変数のメモリが変更されます。dottot
あなたが期待していたものは、データ バインディングと呼ばれ、C が提供するものよりもはるかに高レベルの機能です。
于 2016-01-12T20:11:49.993 に答える