c语言程序设计二级指针,指针数组

有以下程序
#include<stdio.h>
main(){char*mm[4]={"abcd","1234","mnop","5678"};
char**pm=mm;
int i;for(i=0;i<4;i++)
printf("%s",pm[i]+i);printf("\n");}程序的运行结果是(abcd234op8)。为什么啊?

供参考:

#include <stdio.h>
int main()
{
    char*mm[4]={"abcd","1234","mnop","5678"};
    //指针数组,等同于mm[4][4] = {"abcd","1234","mnop","5678"}
    char**pm=mm;// 等同于 pm = &mm[0][0]
    int i;
    for(i=0;i<4;i++)
        printf("%s",pm[i]+i);//i=0,pm[i]+i ==> *(pm+i)+i ==> pm[0][0] ==> "abcd"
    printf("\n");            //i=1,pm[i]+i ==> pm[1][1] ==> "234"
                             //i=2,pm[i]+i ==> pm[2][2] ==> "op"
                             //i=3,pm[i]+i ==> pm[3][3] ==> "8"
    return 0;
}