📜  ++*p、*p++ 和 *++p 之间的区别(1)

📅  最后修改于: 2023-12-03 15:13:03.353000             🧑  作者: Mango

++*p*p++*++p 之间的区别

在 C 语言中,指针是一种非常强大的工具,可以使程序员更高效地操作内存。操作指针时,常常使用 ++ 运算符。但如果 ++ 这个操作符出现在指针的前后不同位置,其执行效果也是不一样的。

本篇文章将详细介绍 ++*p*p++*++p 之间的区别。

++*p

++*p 表示对指针 p 所指向的值进行自增,并返回自增后的值。这个操作符的执行顺序是先解引用,再自增。

例如,如果 p 所指向的值是 5,那么执行 ++*p 后,p 所指向的值变为 6,同时表达式的值也是 6。

int a[] = {1, 2, 3};
int *p = a;
++*p;  // p[0] 的值变为 2,表达式的值也是 2
*p++

*p++ 表示先取出指针 p 所指向的值,然后将指针 p 向后移动一个位置。这个操作符的执行顺序是先取值,再移动指针。

例如,如果 p 所指向的值是 5,那么执行 *p++ 后,p 将指向下一个位置,表达式的值是 5。

int a[] = {1, 2, 3};
int *p = a;
*p++;  // 取出 p[0] 的值 1,然后 p 指向了 p[1]
*++p

*++p 表示先将指针 p 向后移动一个位置,然后再取出指针 p 所指向的值。这个操作符的执行顺序是先移动指针,再取值。

例如,如果 p 所指向的值是 5,那么执行 *++p 后,p 将指向下一个位置,表达式的值是这个位置所存储的值。

int a[] = {1, 2, 3};
int *p = a;
*++p;  // p 指向了 p[1],并取出了 p[1] 的值 2
总结

| 运算符 | 执行顺序 | 作用 | | ---- | ----- | ----------------------------- | | ++*p | 先解引用,再自增 | 对 p 所指向的值进行自增,并返回自增后的值 | | *p++ | 先取值,再移动指针 | 取出 p 所指向的值,并将 p 后移一个位置 | | *++p | 先移动指针,再取值 | 将 p 向后移动一个位置,然后取出指向的位置的值 |

在编写代码时,需要特别注意这三个操作符的执行顺序。混淆它们的执行顺序可能会导致程序的意外结果。