++运算符分前缀++和后缀++,这两个实际上可以说是不同的运算符,表现在以下几点
1. 后缀++的优先级比前缀++高
2. 后缀++是左结合的,而前缀++是右结合的
3. 在写++运算符重载函数时,两个函数声明也是不同的
前缀++是operator++(),而后缀++是operator++(int)
4. 语义上的差别
a++表示a自增1,但表达式的值是a原来的值,类似
tmp=a, a=a+1, tmp;
++a表示a自增1,表达式的值就是a自增后的值,类似
a=a+1, a;
*p++,p先跟*结合了,得到p指向的变量的值,即(*p),然后p再跟++结合,使指针p指向内存中下一个位置。结果改变不能立即看出。
====================
后缀++的优先级比*递引用运算符的优先级高,所以*p++的结合顺序应该是*(p++),根据上面后缀++的语义很容易得到*p++就相当于tmp=p, p=p+1, *tmp