While the structure array StarsList[] is in PROGMEM, it has a member, StarName, that will be pointing to a non-progmem string.
See: avr-libc: Data in Program Space
I know one way to make the string actually go into PROGMEM, but it's likely a space-waster:
struct Star// this structure is defined before the array named StarsList
{
char StarName[32]; // room for the longest star name
int32_t RA; // Right ascension 513397
int32_t DECL; // Declination 690570
};
This way the string is right there in the struct and is in progmem.
The pgmspace manual gives a clearer picture what's going on than the Arduino docs.
As for accessing the struct, you kinda have two choices, copy the whole array element to a conventional RAM struct, and access it normally:
struct Star CrtStar;
memcpy_P(&CrtStar, &StarsList[3], sizeof(struct Star));
Or access each of the members via pgm_read_dword() and strcpy_P() and such.