1

誰かがこれが機能しない理由を説明できますか?

int DIM = 128, hDIM = DIM/2 , dDIM = DIM*2;

int main(int argc, char **argv){

     DIM *= 2;

     printf("\n Double DIM is %d \n",dDIM);

}

なぜこれは512ではなく256を印刷するのですか?

4

3 に答える 3

2

動的に変化するようにコーディングするにはどうすればよいですか?

グローバル変数の代わりに関数を使用できます。

int DIM = 128;

int hDIM(void) { return DIM / 2; }

int dDIM(void) { return DIM * 2; }

int main(int argc, char **argv){
     DIM *= 2;
     printf("\n Double DIM is %d \n",dDIM());
}

このように、hDIM使用するたびdDIMに現在の値に基づいて評価されます。コードのように、値は、プログラムの開始時に、その時点でDIMが持っていた値を使用して、一度だけ割り当てDIMられました。hDIMdDIM

于 2013-03-04T02:04:07.270 に答える
2

dDimが実行される前に評価されるためですmain。開始時-main関数が呼び出される前DIMは128です。これは256dDim = 2 * DIMを意味します。dDim

次に、main()関数が呼び出され、DIM256に設定されます。ただし、これはすべてに影響しませんdDim

動的に変化するようにコーディングするにはどうすればよいですか?

以下のCalebで説明されている方法を使用するか、プリプロセッサマクロを使用できます。

int DIM = 128;

#define hDIM ((DIM) / 2)
#define dDIM ((DIM) * 2)

int main() {
  DIM *= 2;
  printf("%d", dDIM); /*prints 512 :-)*/
  return 0;
}

ただし、上記の方法はお勧めしません。それは厄介でデバッグが難しいです。たとえば、次のテストに失敗します。

assert_equal_float(2.5f, hDIM);/*when DIM is 5*/
于 2013-03-04T02:04:21.317 に答える
1

これはDIM、main()関数での値のみを変更したのに対し、その後は変更されていないためです。つまりdDim、の初期値です。256(128 * 2)

int DIM = 128, hDIM = DIM/2 , dDIM = DIM*2;

上記のステートメントは、値を次のように設定します。

DIM = 128
hDIM = 64
dDIM = 256

main()を行う場合、DIM *= 2DIMの値のみを変更します。hDIMまたはにそれ以上の割り当てを行わなかったため、残りの変数は再評価されませんdDIM

于 2013-03-04T01:48:47.897 に答える