*p++与*(p++)与(*p)++的区别

*p++与(*p)++与 *(p++)的区别

指针的概念有点抽象,所以我刚开始的时候也有点难理解,特别是*p++与 *(p++)的区别,不过写多了就好了。

先说说它们的含义
*p++是指针p所指的值然后指针加一;
*(p++)与上面一样;
(*p)++是指针p所指向的变量的值加一;

重点来了!!!
*p++与 *(p++)的语句是一样的,返回的值也是一样的,但其实它们最后的结果是不一样的,为什么呢?请看下面的代码:

#include <stdio.h>
int main()
{
	int seat = 1534;
	int *p = &seat;
	int a = *(p++);
	printf("%d\n",p);
	printf("%d\n",*p++);
	printf("%d\n",*(p++));
	printf("%d\n",a); 
	return 0;
 }

最后的结果是:
在这里插入图片描述

可以看到:

a的值是与* p++的值一样的,但直接输出 * (p++)的值是输出p所指向的变量的地址自增后的。因为++与 * 的优先级是相同的,所以它们执行的顺序是从右到左的,但是括号的优先级又要比 *和++的优先级高,而后缀自增遇到变量是先运算才自增,前缀自增是先自增才运算,所以a= *(p++)和直接输出 *(p++)的区别就是前者先把 *p的值赋给变量a才自增,这个时候a的值是p所指向变量的值,p所指向的地址则是自增后的地址。
同理, * p++也一样。
(*p)++比较好理解,括号的优先级最高,取p所指向的地址的值,然后值加一,最后的结果就是seat+1。

不过还是得看源代码是什么样的,我这个只是一个例子,如果把a = *(p++);换成
a = (*p)++;的话后面的结果又不一样了。

我感觉我还是理解的不到位???有哪里错的地方还请各位指教。
(⋈◍>◡<◍)
**

满怀希望就会所向披靡!!!

**

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值