【问题标题】:++ Operator on pointers++ 指针上的运算符
【发布时间】:2013-07-22 22:57:11
【问题描述】:

我的 CS 课程正在从 Java 转向 C。我现在正忙于研究指针,我发现用于递增的 ++ 运算符在取消引用时不起作用。这更像是一个好奇的问题。只是还不习惯指针的概念。我只是做错了什么还是与指针有关?

例如:

*pointer++; Will not increment the value.
*pointer+=1; Will increment the value.

提前致谢!

【问题讨论】:

    标签: c pointers increment


    【解决方案1】:

    *pointer++; 几乎等同于:

    *pointer;
    pointer = pointer + 1;
    

    为什么会这样?

    在表达式*pointer++; 中,++ 是后缀运算符,因此先执行* 遵循操作,然后++ 递增pointer 的值(而不是递增值)。

    *pointer += 1 仅相当于:

    *pointer =  *pointer + 1;
    

    增加pointer 指向的值。

    【讨论】:

      【解决方案2】:

      当您想增加值时,您必须确保使用括号。

      (*pointer)++;
      

      【讨论】:

        【解决方案3】:

        *pointer++ 递增 pointer 变量,而不是它指向的值。

        int array[4] = {3,5,7,9};
        
        int *pointer = array;
        
        // *pointer equals 3
        
        *pointer++;
        
        // *pointer now equals 5
        

        【讨论】:

        • @Jim 将代码覆盖在鼠标下方然后按CTRL + K,否则可以使用<pre> </pre> ..
        【解决方案4】:
        *pointer++;
        

        等价于

        *(pointer++);  // pointer is incremented
        

        而不是

         (*pointer)++;  // pointee is incremented
        

        【讨论】:

        • 谢谢,这很有意义。
        【解决方案5】:

        这与运算符的优先级有关:后增量++ 的优先级高于取消引用运算符*,而+= 的优先级较低in the table of operator precedences。这就是为什么在第一个示例中++ 应用于随后被取消引用的指针,而在第二个示例中+= 1 应用于取消引用的结果。

        【讨论】:

        • 我注意到晚了,但你在概念上解释得很好! ...我真的很喜欢你的回答。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-13
        • 1970-01-01
        • 2011-05-09
        • 1970-01-01
        • 1970-01-01
        • 2017-10-04
        相关资源
        最近更新 更多