*p++与(*p)++与 *(p++)的区别
时间: 2023-08-11 18:03:24 浏览: 59
`p++`、`(*p)++` 和 `*(p++)` 是指针操作的三种不同形式。它们的区别如下:
1. `p++`:这是后置递增操作符,它会先使用指针 `p` 的值,然后将 `p` 的值加 1。它返回的是先前 `p` 的值,所以它会将指针指向下一个位置。
2. `(*p)++`:这是对指针 `p` 所指向的值进行后置递增操作。首先,使用解引用运算符 `*` 获取指针 `p` 所指向的值,然后将该值加 1。这个操作不影响指针 `p` 的值,只是对指针所指向的值进行操作。
3. `*(p++)`:这是先使用指针 `p` 的值,然后将 `p` 的值加 1,最后对指针所指向的值进行解引用操作。这个操作会先返回 `p` 指向的值,然后将指针 `p` 指向下一个位置。
总结来说,`p++` 是先取值再递增指针本身,`(*p)++` 是先取指针所指向的值再对该值递增,`*(p++)` 是先取指针所指向的值再递增指针本身。这三种操作在语义上有明显的区别。
相关问题
*p++与(*p)++的区别
*p++与(*p)++的区别如下所示:
1. *p++:这个表达式先取出指针p所指向的值,然后将指针p向后移动一个位置。换句话说,它先取值再移动指针。
2. (*p)++:这个表达式先取出指针p所指向的值,然后对这个值进行自增操作,最后指针p不发生移动。换句话说,它先取值再自增。
下面是一个C语言的例子来演示这两个表达式的区别:
```c
#include <stdio.h>
int main() {
int seat = 1534;
int *p = &seat;
printf("%d\n", *p++); // 输出:1534,先取值再移动指针
printf("%d\n", (*p)++); // 输出:1534,先取值再自增
printf("%d\n", *p); // 输出:1535,指针已经移动到下一个位置
return 0;
}
```
在这个例子中,我们首先定义了一个整型变量seat,并将其地址赋给指针p。然后,我们使用*p++和(*p)++分别对指针p所指向的值进行操作。最后,我们打印出了指针p所指向的值以及指针p的值。
需要注意的是,虽然*p++和(*p)++的语句返回的值是一样的,但它们最后的结果是不一样的。*p++会先取值再移动指针,而(*p)++会先取值再自增。因此,在使用这两个表达式时需要注意它们的不同效果。
指针*p++和*p+1有什么区别?
指针*p++和*p+1有以下区别:
1. 指针*p++:这是一个后缀自增运算符,它先使用指针p指向的值,然后将指针p的值增加1。换句话说,它先解引用指针p,然后再将指针p的值增加1。例如,如果p指向一个整型数组的第一个元素,那么*p++将返回数组的第一个元素的值,并将指针p指向数组的第二个元素。
2. *p+1:这是一个解引用运算符和加法运算符的组合。它先解引用指针p,然后将解引用后的值加1。换句话说,它返回指针p指向的值加1的结果。例如,如果p指向一个整型变量,那么*p+1将返回该变量的值加1的结果。
总结起来,指针*p++先解引用指针再自增,而*p+1先解引用指针再加1。