一.填空
1.假定p 所指对象的值为28,p+1 所指对象的值为62,则*p++的值为___28__;*++p的值为___62__。
分析:由于后置自加运算符优先级高于指针运算符,而前置自加运算符与指针运算符在同一优先级(从右到左),则*p++所指对象的值为28(遵循后置自加运算符的先用再加的原则),而*++p所指对象为62(由于两运算符在同一优先级,且该优先级的结合性是从右到左,则p先与++(前置自加运算符)结合,其值变成了原对象后一对象的地址,再与*(指针运算符)结合)。
2.假定p 所指对象的值为25,p+1 所指对象的值为50,则执行“(*p)++;”语句后,p 所指对象的值为__26___。
分析:由于括号运算符位于第一优先级,高于指针运算符,而在括号内的内容当作一个整体,易得出执行(*p)++时,p先与*结合,代表其所指对象的值25,而后与++(后置自加运算符)时其值不变,执行后其值自加变成了26。
小结:注意此类题目的字眼,“执行时”与“执行后”的结果可能不同!
3.假定p 所指对象的值为25,p+1 所指对象的值为50,则执行“*(p++);”语句后,p 所指对象的值为_50__。
分析:由于自加运算符的特性,在执行时,*(p++)相当于*(p),其值为25,但执行后p自加变成了p+1,实现了p变量地址的转变,其所指向的值也会相应变化,则执行后p所指对象的值为50。