现在写代码比较少,*p++和(*p)++有些混淆,记录下以便以后用到:
*p++等价于*(p++):先取值再p后移??很多人错误地认为是先执行*p, 然后执行p++,结果看起来像是这样子的,不过这么理解是不对的。原因是*和++的优先级相同,它们是右结合方式,实际上先执行p++,因为是后置++,p++返回的还是原来p指向的位置,等执行完解指针*p后,指针p才后移的。例如 int j = i++; 先返回i本身的值赋值给j,然后i在加1。
(*p)++先取值然后对取到的值再加1
#include <iostream>
int main()
{
int arr[] = { 10, 20, 30 };
int* p = arr;
int* q = arr;
int x = *p++;//x = 10, 此时p移到&arr[1]了,*p就等于20;
int y =(*q)++;//q此时指向&arr[0],先把arr[0]的值赋给y,然后arr[0]的值加1,既arr[0]=11;
return 0;
}
结果如下: