📅  最后修改于: 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
向后移动一个位置,然后取出指向的位置的值 |
在编写代码时,需要特别注意这三个操作符的执行顺序。混淆它们的执行顺序可能会导致程序的意外结果。