PROGMEM question, why my way worked?

I have a few character arrays in the PROGMEM and an array containing address to these arrays:

PROGMEM prog_char yn_00[]=" YES >NO<";
PROGMEM prog_char yn_01[]=">YES< NO ";
PROGMEM const char *list[]= {yn_00,yn_01};

Why strcpy_P(list_buffer,(char*)pgm_read_word(list+1)); works to get yn_01’s content?
I thought the addresses to PROGMEM locations are words. Then I should use list+2 to get yn_01. But list+1 works! Is it because of the pointer++ means adding the size of the data type being pointed since list is a pointer? I’m a bit rusty on this topic.

Yes. In C, incrementing a pointer adds the size of the data that is pointed to.
Since "list" is a pointer to ("array of") char *, "list+1" adds the size of char * (which is 2) to the first location.
Any word-wideness of PROGMEM is handled by the predefined macros and function; pointers to flash get operated on just like pointers to ram (and are treated as if they point to bytes.)