No, you need to first declare the individual strings in the array and then the array itself, wich is exactely how it is done in the example linked to..
Here’s another technique. I like it because you don’t need intermediate pointers and the compiler counts the number of strings for you, thus avoiding a “man with two watches” problem. The result is a single pointer stored in RAM. The downside is that the array can no longer be ragged but must be rectangular. This wastes some PROGMEM. Everything in engineering is a trade-off.
const char riddle2[][20] PROGMEM = {
"Those who",
"make it sell it",
"Those who buy",
"it never use it",
"The one who uses",
"it, never knows",
"What is it?"
};
const uint8_t numStrings = sizeof(riddle2) / sizeof(riddle2[0]);
void setup() {
Serial.begin(115200);
delay(1000);
for ( uint8_t i = 0; i < numStrings; i++ ) {
Serial.println((__FlashStringHelper*)riddle2[i]);
}
}
void loop() {}