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);

}

为什么打印 256 而不是 512?

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 当时的值分配值,hDIM并且dDIM只分配一次。

于 2013-03-04T02:04:07.270 回答
2

因为在执行dDim之前评估main。在开始 - 在main调用函数之前,DIM是 128。dDim = 2 * DIM这意味着dDim是 256。

然后main()调用函数,DIM设置为 256。但这一切对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

这是因为您只修改了DIMmain() 函数中的值,而在iedDim的初始值之后没有改变。256(128 * 2)

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

上述语句设置的值如下:

DIM = 128
hDIM = 64
dDIM = 256

main()你这样做的时候DIM *= 2,你只修改 DIM 的值。剩余的变量将不会被重新评估,因为您没有对hDIMor进行任何进一步的赋值dDIM

于 2013-03-04T01:48:47.897 回答