c语言 int a[]={1,2,3,4,5,6,7,8,9,10},*p=a,则值为3的是

A p+=2,*(p++) B p+=2,*++p C p+=3,*p++ D p+=2,++*p
请详细解答一下

答案A.
数组定义是a[0]=1,a[1]=2,a[2]=3, ...,a[9]=10
A. p += 2使p指向a[2], *(p++)表示先取*p的值, 然后p增加1(指向a[3]), 所以取得的值是a[2]=3
B. p += 2使p指向a[2], *++p表示先p增加1(指向a[3]),然后取*p的值,所以是a[3]=4
C. p += 3使p指向a[3], *p++表示先取*p的值, 然后p增加1(指向a[4]), 所以取得的值是a[3]=4
D. p += 2使p指向a[2], ++*p对*p的值增加1, 所以取得的值是a[2]=a[2]+1=4

还有一种写法是(*p)++, 表示先取*p的值, 这个值再增加1
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-10-10
  这是一个指针求值的问题,答案应该是A
  答案分析如下:
  首先,所有的逗号运算符,是从左向右进行的,其值为右边结果计算的值
  A p+=2,*(p++) 先计算p+=2 再计算*p 最后计算p++ 表达式的值在第二步计算确定的 为p[2] = a[2] = 3。表达式计算完毕之后,p指向4
  B p+=2,*++p 先计算p+=2,再计算++p 最后计算*p 表达式的值在最后一步确定 为4
  C p+=3,*p++ 先计算p+=3,再计算*p 最后计算++ 表达式的值在第二步确定为4,而后a[3]的值变为5
  D p+=2,++*p先计算p+=2,再计算*p 最后计算++ 表达式的值在最后一步确定,为4,而后a[2]的值变为4
相似回答