指针变量 跟 ++结合的时候由于优先级的问题,有时候会弄混淆,梳理如下:
1、 表达式及 ++
对于任何一个表达式,表达式会做一些事情,并且整个表达式有个值。
比如 a+b ,表达式做的是加法,并且表达式的值就是 两个数的和。
对于 a++ 这种表达式,会对a自身+1, 但是表达式的值是a改变以前的值。
对于 ++a这种表达式,也会对a自身+1,但是表达式的值是 a改变以后的值。
int a = 1;
b = a++; //这里 b 得到的是 a++这个表达式的值,也就是a改变以前的值。
b= ++a; //这里b 得到的是++a这个表达式的值,也就是a改变以后的值。
2、++与指针结合。
++ 的优先级 高于 *。
int a[5] = {0,1,2,3,4};
int *p = &a[0];
以下两个分支:
2.1-----------------------------------------------
当写表达式 *p++ 的时候 相当于 *(p++), p++这个表达式的值是p改变以前的值,也就是a[0]的地址,所以这里访问的是a[0],并且p指向a[1];
b = *p++, b的值是a[0],p指向a[1],a[0]不变。
2.2-----------------------------------------------
当写表达式 (*p)++的时候,由于括号优先级最高,所以这个表达式的值是 a[0]++;
b = (*p)++,b的值是a[0]改变以前的值,然后 a[0]自增1,p不变。