*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)++;的话后面的结果又不一样了。
我感觉我还是理解的不到位???有哪里错的地方还请各位指教。
(⋈◍>◡<◍)
**
满怀希望就会所向披靡!!!
**