这个代码是什么意思,有人懂么解释一下

#include<stdio.h>
#include<math.h>
#define N 5
void fun(int a[],int k,int *n){
int *p,*q,*r=a;
if(k<0||k>=N){
printf("error!\n");exit(0);
}
for(p=a,q=a+k;p<a+N;p++)
if(p!=q){
*r++=*p;
(*n)--;
}
}
int main(){
int a[N],k,n=N,*p;
for(p=a;p<a+N;p++){
scanf("%d",p);
scanf("%d",&k);
}
fun(a,k,&n);
for(p=a;p<a+N;p++){
printf("%2d",*p);
}

}

这是C语言的