关于#c语言#的疑惑

y的值我知道,可为什么最后a【0】的值为6 ,它应该没有发生变化呀?

img

一步步来。y=(*--p)++
首先p是数组第二个地址,--p后是数组第一个地址,*--p后是取的数组第一个元素,先返回给y,所以y的值为5,然后这个元素做+1运算,所以数组第一个元素即a【0】=6

  • p 指向 a数组 第二个元素, --p 指p 往左移动一位,即指向 a数组第一个元素;*--p 表示 取第一个元素的值;
  • 所以 y = 5, 而 (*--p)++ 是修改 第一个元素对应的值,即 5+1 = 6, 也就是 a[0] = 6;

(*--p)++表示地址储存的值的自增,即a[0]自增

(*--p)++分三步,第一步是对p的地址进行了自减法,也就是a数组的第一个元素,第二步是*是一个解引用操作符,然后对他进行了自增加,相当于改变了第一个元素的值,5+1等于6,所以a【0】=6