(*p)++和*(p++)和*p++的区别,为什么?
*(p++),是先对指针P进行++运算,然后再取取值,
*p++,同*(p++),因为按优先级来看,*和++是同级,他们都是从右到左的顺序进行运算,所以先++,再*。
如果
char q[5] = "am";
char *p = q;
那么,
(*p)++后,p就变成了"bm";因为是进行对其首元素进行加1运算
*(p++)后,p就变成了"m",因为是先指向下一个元素,再进行取值运算,
*p++同上面,
如果只是征对这3个语句赋值给其他变量的话,3个的结果都是a,在这里。
char o = (*p)++;
char m = *(p++);
char n = *p++;
都是a。
2019-03-25
*(p++):取出指针p所指地址中的数据,指针+1
*p++ : 等同于 *(p++)
(*p)++ : 取出指针p所指地址中的数据,地址中的数据+1
********************************************************
tip1. * 与 ++的优先级相同的,它们的结合性都是自右向左
tip2. ()的优先级高于*和++
****************************************************************
优先级、结合性分析:
*p++ 由(tip1)可知,p先与++结合,再与*结合,
*(p++) 由(tip2)可知,p先与++结合,再与*结合
得出结论:*p++等同于 *(p++)
**********************************************************
变量分析:
*(p++) 由(tip2)可知,是p先与++结合,变量是 p,
得出结论:*(p++) // 是指针所指的地址值在变化 (不同点)
(*p)++ 由(tip2)可知,p先与*结合,得到*p
是*p与++结合,变量是 *p
得出结论:(*p)++ //是指针所指地址中的数据值在变化 (不同点)
********************************************************************
小结:
因为(tip1、tip2)可得出:
1.指针所指地址自增
*p++等同于*(p++)
*++p等同于*(++p)
2.指针所指地址中数据自增
++(*p)等同于++*p
(*p)++
*********************************************************
作为输出项时
(左自增:先求变量变化,再输出)
形式:++p、*++p、++*p、++(*p)、
(右自增:先输出变量当前所指值,再求变量的变化)
形式:p++、*p++、(*p)++、*(p++)
哪个是变量:(在tip1、tip2的基础上)与 ++ 结合的整体是变量
++p : p 是变量、
++(*p): (*p)是变量
***********************************************************
int a[2]={1,10};
int *p=a;
*p++//的结果就是等于数组的第二个元素10.
(*p)++//的结果就是1+1=2.
楼主,我这样解释,把意思讲明白了么?
(*p)++中,是p所指的东西++
*(p++)中,是p的地址++。*p++与*(p++)一样的。