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

1 に答える 1

2

C は自動データバインディングを提供しないためです。代入演算子 (またはあなたの場合は加算代入) を使用すると、式の右側にステートメントのVALUEが代入されます。

variable = statementはあるstatement値に計算され、この値はのデータ型variableに従って に割り当てられることを意味します。variable

これは、その変数に実際のステートメントではなく、値を割り当てていることを意味します。

それをよりよく説明するには:

tot = pro + dot; 

次のことを行います。

  1. 計算しなければならないものを variableに代入する必要がありますtot
  2. 何かがステートメントですpro + dot
  3. このステートメントは加算であり、2 つのオペランドを取る演算です。
  4. オペランド 1 はproであり、3 に評価されます (C はそのステートメントで pro を 3 に置き換えることを意味します)。
  5. オペランド 2 はdotで、5 に評価されます。
  6. すべてのオペランドが評価されます。
  7. ステートメントは次のとおり3 + 5です。
  8. これは、整数の 8 に評価されます。
  9. 表現になりましたtot = 8;
  10. 値 8 を に割り当てますtot。これは、 で表される変数のメモリ アドレスに移動しtot、整数 8 を書き込むことを意味します (C 標準/マシン アーキテクチャに従って)。

もしあなたがそうするなら

dot += 23;

Cはこれを理解しています:

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

以前のように:

  1. dotは 8 を意味し、23 は 23 を意味します。
  2. ステートメント: 8 + 23
  3. このステートメントは 31.dot = 31;に評価されます。これは、整数 31 を のメモリに書き込むことを意味しますdot

現在tot、 はその影響を受けません。なんで?はメモリ内のスペースであるためtot、値 8 が保持されます。2 つの他の変数を追加して 8 が作成されたことはわかりません。ちょうど 8 です。他の変数を変更しても、この変数には影響しません。

変更すると、変数のメモリではなくdot += 23;、変数のメモリが変更されます。dottot

あなたが期待していたものは、データ バインディングと呼ばれ、C が提供するものよりもはるかに高レベルの機能です。

于 2016-01-12T20:11:49.993 に答える