首先m[12]={0,2,4,6,8,10,12,14,16,18,20,22}
语句
if(k<3) p[k]=m+2*k*k;
的计算过程序,当k=0时,p[0]=m也就是指针p[0]指向的是数组m的开始
当k=1时,p[1]=m+2;因此p[1]指向m+2的位置,也就是从数字4开始的位置
当k=2时,p[2]=m+8;因此p[1]指向m+8开始的位置,也就是&m[8]开始的位置,即数组m中的第9个元素的地址,也就是16
再来看for中循环语句中的指针表达式,首先下标运算符p[k]是与*(p+k)等价的,
(*(p+k))[4-k];
=(p[k])[4-k]
=*(p[k]+4-k) //注意这一步,不能把括号折开来算,而应按p[k]与*(p+k)等
价的替换来计算,不然在某些地方会出错。
=*(&p[k][0]+4-k) //在计算地址相加时,应把p[k]这样的式子转换为前面带有
&地址运算符的表达式才能直接相加,否则会出错,因为
p[k]就是指的p[k][0]的地址,因此应这样换算
=*(&p[k][4-k]) //这里就可以地址直接相加了
=p[k][4-k] //这是最后结果。
上面的计算如果你的理解能力强,你也可以用文字去描术,什么指针偏移多少个单位,又指向哪里,这样来描术,但本人认为文字描术容易出错,因此采用数学的计算方法,科学,安全,不易错。
再来看p[k][4-k]究竟是什么,
当k=0时,就是p[0][4-0]因此,因为p[0]是指向的数组m的开始,因此p[0][4]就是指的数组中下标为4的元素,也就是8
当k=1时,就是p[1][4-1]=p[1][3],因为p[1]是指向的数组m+2以数字4开始的位置,因此p[1][3]就是指的从4的位置起(4的下标对于指针p[1]来讲为0),向后的下标为3的位置的元素,也就是10
当k=2时,就是p[2][4-2]结果就是m+8开始的下标为2的元素的值,就是20
因此最后sum的值是8+10+20=38
温馨提示:答案为网友推荐,仅供参考