请问能否具体解释一下圈中这一段代码的具体含义,它是如何防止数组越界的?


#include <stdio.h>
#include<string.h>

int main()
{
    char *array[5] = {"fish","five","star","good","bad"};
    char *(*p)[5] = &array ;
    int i,j;
    
    for(i = 0; i < 5; i++)//j=0;*(*(*p+j)+i) !='\0' ;j++
    {
        for(j=0;j<5 ;j++)
        {
            if (i > strlen((*p)[j]) - 1)
                {
                    break;
                }
        printf("%c ", *(*(*p+j)+i));    
        }
        printf("\n");
        }


    return 0;
}

img


请问能否具体解释一下圈中这一段代码的具体含义,它是如何防止数组越界的?