假设 p 是指向数组 arr 中第 n 个元素的指针,那么 p++、++p、(*p)++ 分别是什么意思呢?
当 p 是指向数组 arr 中第 n 个元素的指针时,
- *p++:首先取出 p 指向的元素的值,然后将指针 p 移动到下一个元素的位置。
- *++p:首先将指针 p 移动到下一个元素的位置,然后取出该位置上的元素的值。
- (*p)++:首先取出 p 指向的元素的值,然后使该值加一。
这些表达式中的操作顺序对于理解它们的行为至关重要。
假设有一个数组 arr = {10, 20, 30, 40, 50},并且指针 p 指向数组 arr 的第 2 个元素(即 arr[1])。
- 对于 *p++:
- 首先,*p 表示取出 p 指向的元素的值,即取出 arr[1] 的值,也就是 20。
- 然后,p++ 会使指针 p 指向下一个元素,即移动到 arr[2] 的位置。
所以,在执行完 *p++ 后,p 指向了 arr 的第 3 个元素,值为 30。
- 对于 *++p:
- 首先,++p 会使指针 p 先移动到下一个元素,即指向 arr[2] 的位置。
- 然后,*p 表示取出 p 指向的元素的值,即取出 arr[2] 的值,也就是 30。
因此,执行 *++p 后,p 仍然指向 arr 的第 3 个元素,值为 30。
- 对于 (*p)++:
- 首先,(*p) 表示取出 p 指向的元素的值,即取出 arr[1] 的值,也就是 20。
- 然后,对这个值进行自增操作,所以 arr[1] 的值变为 21。
执行完 (*p)++ 后,数组 arr 变为 {10, 21, 30, 40, 50}。