二级c语言考试试题,知道答案理解不了

img


我知道输出的是最后k的值 和a数组中k对应位置的值,但是不知道这个k的值怎么求?还有这个s[p]>s[*k]*k=p理解不了

1、fun() 函数里的k是一个指针,表示变量的地址,而*k则是变量的值,其中*k=p,即给变量赋值0。
2、s[p]表示 数组第p个位置的值,s[*k]表示数组第*k个位置的值.
3、fun() 函数从0开始循环遍历,
第1次循环 p=0, *k=0, s[0] > s[0] 不满足条件,*k=0;
第2次循环 p=1, *k=0, s[1] > s[0] 满足条件,*k=1;
第3次循环 p=2, *k=1, s[2] > s[1] 满足条件,*k=2;
第4次循环 p=3, *k=2, s[3] > s[2] 满足条件,*k=3;
第5次循环 p=4, *k=3, s[4] > s[3] 满足条件,*k=4;
第6次循环 p=5, *k=4, s[5] > s[4] 满足条件,*k=5;
第7次循环 p=6, *k=0, s[6] > s[5] 满足条件,*k=6;
第8次循环 p=7, *k=6, s[7] > s[6] 不满足条件,*k=6;
第9次循环 p=8, *k=6, s[8] > s[6] 不满足条件,*k=6;
第10次循环 p=9, *k=6, s[9] > s[6] 不满足条件,*k=6;
循环结束后,k的值是6。整个函数的意思是找到数组的最大值以及它的位置。

img

只需要理解for循环的细节,k的初始值是0,p值是0,
不断自增的是p,并非是
k,,k只有在满足if条件才会被重新赋值,,,刚开始s[0]==s[0],k值不变,观察原数组可知,在20(包括20)之前一直满足条件,k一直被赋新值。直到读到20之后,就不满足条件了,所以k保持着索引值6不变,,用*k就是一个整型值,写成指针形式为了值能被传递到被调用函数