int a[]= {1,2,3,4,5}; int *p = a;下列表达式与 ++*p 相同的是()
第一眼看着就觉得怪,以为是就是*p,大学时候学过c语言,感觉像是指针,后来觉得我练习的是java,不应该把,没想到真是出错了,我说怎么没见过这种语法
++作为前缀,与*的优先级相同,作为后缀,++优先级高于*,所以:++* p;等价++(*p),*++p;等价*(++p),*p++;等价*(p++)
题目的意思应该是:
p <==> a <==> &a[0]
p <==> *&a[0]
*p <==> a[0]
所以表达式 ++p <==> ++a[0]
但是这题有歧义 选项A的值和选项C的表达式的值都为 2
++ 和 * 是同一优先级,结合性从右到左
++*p : p 先和 * 结合, 取值得 1, 再和前缀 ++ 结合, 表达式值为 2
*++p : p 先和前缀 ++ 结合, p 指向下一个int元素的地址(&a[1]), 再和 * 结合, 表达式值为 2