【问题标题】:In which cases i++ and ++i can refer to the same value? [duplicate]在哪些情况下 i++ 和 ++i 可以引用相同的值? [复制]
【发布时间】:2014-03-03 06:25:01
【问题描述】:

为什么i++++i在下面的代码中是一样的?

#include <stdio.h>  

int main()  
{  
    int i=5;  

    while(1)  
    {  
        i++;                  /*replacing i++ by ++i also gives 6*/  
        printf("%d",i);  
        break;  
    }  

    return 0; 
}  

输出为 6。我了解到递增运算符 i++ 的值是 i 的当前值,并导致 i 的存储值递增。但 i's 的值显示为 6 虽然当前i 的值为 5。将 i++ 替换为 ++i 也会给出相同的值 6。为什么在这种情况下 i++++i 相同,为什么输出是 6 而初始值为 5。

【问题讨论】:

标签: c increment


【解决方案1】:

执行顺序是连续的。

i++ 或就此而言 ++i 是要在该序列点执行的单个指令,i 的值 not 在该指令的任何位置使用,因此它不会没关系。

如果您将printf("%d",i); 替换为printf("%d",i++);printf("%d",++i);,情况会大不相同。

编辑:我还发现了一些非常有用的知识。在CC++ 中,前缀一元运算符返回一个lvalue,与后缀一元运算符相反,因此,例如,如果你想将i 递减两次,那么

(i--)--; // is illegal

(--i)--; // is perfectly legal and works as intended.

【讨论】:

    【解决方案2】:

    查看我在What is the difference between ++i and i++?找到的答案

    "++i 会增加 i 的值,然后返回增加后的值。"

    "i++ 会增加 i 的值,但会返回 i 在增加之前持有的原始值。"

    你不使用它返回的值,所以在你的情况下并不重要。

    【讨论】:

      【解决方案3】:

      它只改变在方法中使用时设置的值。

      使用i++,您将在方法中使用i,一旦完成,i 将增加。

      使用++I,首先增加值,然后在方法中使用它。

      【讨论】:

        【解决方案4】:

        i++ - i 加 1 返回旧值。

        ++i - i 加 1,返回新值。

        在你的情况下:

        i++ - 返回 5 并将 1 加到 i 使 i 为 6。如果你抓住 i++的返回值你就可以清楚了。因为 return 的值为 5。

        ++i - 将 1 添加到 i 并将 i 设为 6,然后返回 i=6

        示例代码:

        #include <stdio.h>  
        int main()  
        {  
            int i=5;  
            while(1)  
            {  
                int post, pre;
                post = i++;  
                printf("post : %d, i: %d\n", post,  i);  
                
                i = 5;
                pre = ++i;
                printf("pre : %d, i: %d\n", pre,  i);  
                break;  
            }  
            return 0; 
        }  
        

        输出:

        post : 5, i: 6
        pre : 6, i: 6
        

        【讨论】:

          【解决方案5】:
          int i = 5;
          i++;   // implies i = i + 1 ==> 6
                 // Even ++i results the same          
          printf("%d",i); // Obviously it prints 6 
          

          【讨论】:

            【解决方案6】:

            如果您不将返回值分配给变量或将其用作参数,则结果完全相同。

            两者的主要区别在于 ++i 递增变量然后才赋值,而 i++ 先赋值后递增。

            【讨论】:

              猜你喜欢
              • 2015-05-24
              • 1970-01-01
              • 1970-01-01
              • 2021-12-07
              • 2017-10-23
              • 1970-01-01
              • 2011-09-22
              • 1970-01-01
              • 2010-10-08
              相关资源
              最近更新 更多