要答辩 还不理解透彻 我需要一条语句一条语句的解析

Wage*wptr[N_WAGES], *p;
int n = n_wages, i, j, x;
puts("[1].以编号排序");
puts("<2>.以姓名排序");
scanf("%d", &x);
for (i = 0; i < n; i++) wptr[i] = &wages[i];
for (i = 0; i < n - 1; i++)
for (j = 0; j < n - 1 - i; j++)
if (x == 2) {
if (strcmp(wptr[j]->name, wptr[j + 1]->name)>0) {
p = wptr[j];
wptr[j] = wptr[j + 1];
wptr[j + 1] = p;
}
} else {
if (wptr[j]->num > wptr[j + 1]->num) {
p = wptr[j];
wptr[j] = wptr[j + 1];
wptr[j + 1] = p;
}
}
puts("-");
for (i = 0; i < n; i++) put(wptr[i]);
puts("-");}


Wage*wptr[N_WAGES], *p;//定义指向Wage数据类型的指针数组和指针
int n = n_wages, i, j, x;
puts("[1].以编号排序");//输出"[1].以编号排序"
puts("<2>.以姓名排序");//输出"<2>.以姓名排序"
scanf("%d", &x);//输入x的值
for (i = 0; i < n; i++)
    wptr[i] = &wages[i];//for循环将上述定义的指针数组一一对应指向wages数组,wages[i]应该是Wage数据类型的数组,你没有给出Wage的定义
for (i = 0; i < n - 1; i++)
    for (j = 0; j < n - 1 - i; j++)//双层for循环
        if (x == 2)//if条件判断,正确则执行一下语句,这应该知道吧,根据上文输出,2是以姓名排序
        {
            if (strcmp(wptr[j]->name, wptr[j + 1]->name)>0)//strcnmp()函数,比较两个字符串,相等返回0,前者大于后者返回1,否则返回-1
            {
                p = wptr[j];
                wptr[j] = wptr[j + 1];
                wptr[j + 1] = p;//交换wptr[i]和wptr[j]的指向
            }
        }
        else//以编号排序
        {
            if (wptr[j]->num > wptr[j + 1]->num)
            {
                p = wptr[j];//排序,交换wptr[j]和wptr[j+1]的指向
                wptr[j] = wptr[j + 1];
                wptr[j + 1] = p;
            }
        }
puts("-");//输出打印"-"
for (i = 0; i < n; i++)//for循环输出打印wptr
    put(wptr[i]);
puts("-");//输出打印
}