C语言中的运算符优先级 - 返回一个值

5
我有以下语句:
``` return *local_stack_var2++ + 42; ```
这是正确的步骤吗?
1. 解引用 `local_stack_var2`; 2. 将解引用后的 `local_stack_var2` 加上 42(函数将返回此值); 3. 在函数结束之前,会激活后置自增运算符,使 `local_stack_var2` 指向的对象的值增加。
因此,在代码格式中,它看起来像这样:
int temp = *local_stack_var2 //step 1;  
int returnValue = temp + 42; //step 2, compiler will return THIS value     
*local_stack_var2 = *local_stack_var2 + 1; //step 3 
 return returnValue;

谢谢!


优先级、优先级和优先级... - user379888
1个回答

8

接近正确,但是后增运算符++ 的优先级高于一元*,所以它会首先发生。操作顺序如下:

  1. 后增local_stack_var2,使其增加1,但表达式的值仍然是原始值,而不是增加后的值。
  2. 解引用该原始值。
  3. 42添加到解引用上述原始值所得到的结果。
  4. 返回该值。

因此,在代码中,它会像这样(不是精确的):

int* temp = local_stack_var2;
local_stack_var2 = local_stack_var2 + 1;
int retval = *temp;
reval = retval + 42;
return retval;

后增量不一定会发生。++*具有更高的优先级,这意味着只有local_stack_var2被递增,而不是*local_stack_var2 - 优先级控制什么被递增,而不是何时被递增。实际的递增可以在函数返回之前的任何时间发生。 - caf
@caf 是的,当我将“like”加上斜体并添加“(not precisely, but close)”时,我就是在考虑这个。从技术上讲,你不可能写出正确的方式,因为这样做会有问题,但我认为这并不重要,不必让OP担心。 - Seth Carnegie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接