这段代码输出结果是什么呀?为什么?

#include <iostream>
#include <cstring>
using namespace std;

void invert (char *a,int x,int y)
{
    char t,*p,*q;
    p=a+x;
    q=a+y;
    while(p<q)
    {
        t=*p;
        *p=*q;
        *q=t;
        p++;q--;
    }
}

int main()
{
     char dt[13]="GoodBookNice";
     int i=0,n=1;
     while(i<8)
     {
         invert(dt,i,i+5);
         cout << "第" << n++ << "次计算:" << endl;
         for(int j=i;j<=i+5;j++)
         {
             cout << dt[j] << ',';
         }
         cout << endl;
         i+=6;
     }
     cout << "共执行了" << i << "次计算。" <<endl;
     return 0;
}


输出结果:

1次计算:
o,B,d,o,o,G,
第2次计算:
e,c,i,N,k,o,
共执行了12次计算。

讲一下为什么是这样的结果:
这个代码里面的invert函数的作用是,把字符数组的选定范围内的字符反转顺序
如,char a[6]="abcdefg";invert(a,0,6)的结果就是字符数组a内的数据被倒序,即gfedcba,是指字符数组内数据被倒序改动,而不是倒序输出。
主函数的功能就是调用了上面的倒序函数,照这样invert(dt,i,i+5);倒一次,前六个就被倒转,然后倒转的字符被输出。
i+6后,不满足循环条件,又invert(dt,i,i+5)倒转一次,这时候倒转的是dt[6]到dt[11],接着倒转的字符被输出,i再次+6;
满足条件跳出循环,输出一共i次计算,就是12次