在C语言中,使用赋值运算符=计算表达式时,如果这个表达式中有一个单独的变量,那么这个变量的值将只被计算一次。这通常不是问题,但在某些情况下可能会导致出现错误结果。例如,考虑下面的代码:
int i = 1;
int j = 1 + i++;
这个代码计算了表达式1 + i++,并将结果赋给j。如果我们认为这个表达式会计算两次i,那么j的值将是3,因为i在计算1时增加了1,在计算i++时再次增加了1。但实际上,在这个表达式中,i只被计算了一次。因此,j的值将是2。
为了避免这种情况,我们应该使用括号来强制计算表达式,如下所示:
int i = 1;
int j = 1 + (i++);
在这个表达式中,括号强制计算i++,确保它会在计算1 + i之前增加1。这将确保j的值将是3,而不是2。
因此,我们可以通过使用括号来解决K&R书中提到的问题,以确保表达式中的变量被计算正确的次数。