#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;
、変数のメモリが変更されます。dot
tot
あなたが期待していたものは、データ バインディングと呼ばれ、C が提供するものよりもはるかに高レベルの機能です。
于 2016-01-12T20:11:49.993 に答える