下面的是一个大程序中的一个小程序  帮我分析一下 尽量详细 具体到每行就更好了

#include<stdio.h>
#include<io.h>
#include<string.h>
#include<stdlib.h>
#define L 5
#define H 20000
int hh;
int hjqs,hjqt;
int dsh;//倒数第几个数

int fun2(int sj[][L],int n)//统计 从最后一行起,每行最后一个数有不同的n个时,再上面一行所有数都是已出现过的数 的情况连续出现最多的次数
{
    int i,m;
    int x,x0;
    int tj=0;
    int hjqts,hjqtt,ii[2];
    int *cp,nn;
    x=x0=0;
    cp=(int*)calloc(hh,sizeof(int));
    for(i=hh-1;(m=mfun2(sj,n,&i))!=-1;ii[0]=i-1,ii[1]=m,i--)
    {

        if(m)
        {
            if(x0==0&&ii[1]==0)
            {
                hjqts=ii[0];
            }
            hjqtt=i;
            x0++;
            tj++;
        }
        else
        {
            (*(cp+x0-1))++;
            if(x0>x)
            {
                hjqt=hjqtt;
                hjqs=hjqts;
                x=x0;
            }
            x0=0;
        }
    }
    if(m==1)  (*(cp+x0-1))++;
    for(nn=(x>x0?x:x0);
        nn>=1;nn--){
        printf("连续%d次不中共有%d次\n",nn,*(cp+nn-1));
    }
    //free(cp);
    //printf("满足条件的有%d条。\n",tj);
    return (x>x0?x:(hjqt=hjqtt,hjqs=hjqts,x0));
}