Regarding post increment

前端 未结 1 1520
醉话见心
醉话见心 2021-01-23 23:41
   int get()
   {
      static i = 1;
      return i++;
   }

  int main(int argc, char *argv[])
  {
      printf(\"%d %d %d\\n\", get(), get(), get());
      return 0;
         


        
相关标签:
1条回答
  • 2021-01-24 00:04

    There are two issues here, lifetime and scope.

    The scope of variable is where the variable name can be seen. Here, i is visible only inside function get().

    The lifetime of a variable is the period over which it exists. If i were defined without the keyword static, the lifetime would be from the entry into get() to the return from get(); so it would be re-initialized to 1 on every call.

    The keyword static acts to extend the lifetime of a variable to the lifetime of the program; e.g. initialization occurs once and once only and then the variable retains its value - whatever it has come to be - over all future calls to get().

    Difference between post and pre increment: What is the difference between pre-increment and post-increment in the cycle (for/while)?

    Source: Answer at this place

    Update 1

    Post increment works by making a temporary copy of the existing value, then incrementing the original value, then finally returning the temporary as a result of the expression. As a result, it appears the increment is done post-expression evaluation, but it isn't, and a sample program demonstrating this is fairly straight forward if interested. It is the temp-copy that makes post-inc expensive. (Thanks to WhozCraig for correcting)

    Update 2

    Both of those are post-increment unary operations. Both of them make a temp copy of the operand (i in the first case, a in the second), then increment the operand, then return the temp copy as the result of the post-inc expression. The result in the first case is i is incremented and its value prior to the increment is returned. In the second case a is incremented and func is invoked with the value prior to the increment.(Given by WhozCraig)

    0 讨论(0)
提交回复
热议问题