(*p++)++**++p 相当于 ((*p++)++)*(*++p) ,先看 *p++,先取p(因为++是后缀)与 * 结合,得1(也就是a[0]的值了),之后p移动一位指向下一个数(指向了a[1]),接着是括号后面的++,使得a[0]的值加1变为2,但此时不影响*p++的结果,右边括号内是p先移动指向a[2](因为此前p已经指向了a[1]),再取a[2]的值,也就是3了,最后左边的1 * 右边的3,等于3。
答案确实是3.过程如下:
(*p++) 使得,p向后移动,指向a[1],并返回原来p的值(指向a[0]),在此表达式中相当于a[0]
(*p++)++执行,相当于a[0]++,使得a[0]的值为2,并返回1
之后,遇到了第一个*,所以转到计算*++p,之前p指向a[1],所以现在,先自加1,指向a[2],解引用后为3,所以,整个表达式值为1*3=3
望采纳!!!
这种运算在不同的系统上会有不同的结果,不建议深究这种无意义的脑残题:
(*p++)返回*p,并使p指针前移一位指向a[1],然后由(*p++)返回的*p(此时的p指针依然指向a[0])参与后缀++的运算,即(*p)++,这个(*p)++会先返回a[0]的值1参与乘法运算,再将a[0]的值增1;由于 前面的再次后缀++运算已经使p指向了a[1],所以后面的++p会先使p前移一位指向a[2],会返回a[2]的地址,再配合*的作用提取到了a[2]的值3,所以乘法运算就是a[0]*a[2],注意这里的a[0]是一开始的1,不是增值后的2。
//强烈鄙视出这种脑残题的贱人!!