c/c++语言开发共享C – 指针和不同的结果?

我无法弄清楚这一点。 也许是因为凌晨2点。 无论如何,我在这里不知所措。

#include  int main() { char array[] = "123456789"; char* ptr = array; printf("%cn", *(ptr++)); printf("%cn", *ptr); *ptr = array[3]; printf("%cn", *(ptr++)); printf("%cnn", *ptr); return 0; } 

结果是:

 1 2 4 3 

那是怎么回事,第1步和第2步以及第3步和第4步是相同的,但是我得到了不同的结果?

    让我们一步一步地完成代码:

    第0步:

     char* ptr = array; 

    将char指针指向数组的开头(即位置0)。

    步骤1:

     printf("%cn", *(ptr++)); 

    取消引用位置0处的指针,打印驻留在那里的值( 1 ),然后将指针递增到位置1

    第2步:

     printf("%cn", *ptr); 

    取消引用位置1处的指针并打印驻留在那里的值( 2

    第3步:

     *ptr = arr[3]; 

    取消引用位置1处的指针,并使用数组位置3处的值更新指向的值。 这是值4。

    第4步:

     printf("%cnn", *(ptr++)); 

    取消引用位置1处的指针,打印刚刚更新的值( 4 ),然后将指针递增到位置2

    第5步:

     printf("%cn", *ptr); 

    取消引用位置2处的指针并在那里打印值( 3 )。

    也许你真正想要的是拥有ptr = &arr[3]; 它将指针指向一个新位置(即arr[3]的地址)。

    请注意,由于运算符优先级 ,上面ptr周围的大括号实际上是冗余的。

    对于*(ptr++) ,后增量具有比间接更高的优先级,因此它将在我们取消引用指针之前应用

    *(++ptr)也不需要大括号。 这里即使预增量和间接具有相同的优先级,它们也是从右到左进行计算的。 因此指针将在取消引用之前递增。

    试试这个:

     ptr = array + 3; 

    ptr++后增量运算符,因此指针在取消引用递增(根据标准)。

    此外,步骤:

     *ptr = array[3]; 

    分配给array[1]值4,因此您打印4而不是2并增加到3。

    指针分配的正确方法是:

     ptr = &array[3]; 

    要么

     ptr = (array + 3); 

    您实际上是通过ptrarray[3]的值赋给值pointet。

      以上就是c/c++开发分享C – 指针和不同的结果?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/560792.html

      (0)
      上一篇 2021年1月28日
      下一篇 2021年1月28日

      精彩推荐