Making sure I understand double array

This is just an example but:

static const uint8_t PROGMEM image[][] = {
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xfe,0x03,0xde,0x07,0xff,0x03,0xde},
    {0x0f,0xff,0xc3,0xde,0x1f,0xff,0xe3,0xde,0x3f,0x07,0xe3,0xde,0x3e,0x79,0xf3,0xde},
    {0x7d,0xfc,0xf3,0xde,0x7d,0xfe,0xf3,0xde,0x7b,0xfe,0xfb,0xde,0x7b,0xde,0x7b,0xde},
    {0x7b,0xde,0x7b,0xde,0x7b,0xde,0x7b,0xde,0x7b,0xde,0x7b,0xde,0x7b,0xdf,0x7f,0xde},
    {0x7b,0xdf,0x7f,0xde,0x7b,0xcf,0x7f,0xbe,0x7b,0xcf,0xbf,0x3c,0x7b,0xcf,0xcc,0x7c},
    {0x7b,0xc7,0xf1,0xf8,0x7b,0xc3,0xff,0xf8,0x7b,0xc1,0xff,0xf0,0x7b,0xc0,0xff,0xc0},
    {0x7b,0xc0,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xc0},
};

The final code will have 10k (plus applicable overhead) shoved into flash ROM using PROGMEM. They all consists of 20 128x32 bitmapped image to display on a mono panel (VFD specifically)

Would this work for double array, and is the first [] referring to the whole line or block of code between {}, and second [] the individual bytes of the specified block? That is if I called image[8][0] returns 0x7b and next byte be 0xc7, etc? It'd be like a slow monochrome slide show for now as I figure out my shiny new VFD.

The correct term is two-dimensional array, not double array. Calling it a double array will cause confusion with the double data type.

wilykat:
Would this work for double array, and is the first [] referring to the whole line or block of code between {}, and second [] the individual bytes of the specified block? That is if I called image[8][0] returns 0x7b and next byte be 0xc7, etc?

Correct.

Ok thanks!!

Would this work for double array,

To be pedantic, what you have written won't work because the compiler will complain
error: declaration of 'image' as multidimensional array must have bounds for all dimensions except the firstbut the idea and your understanding is correct.

The first level index to the array refers to a row of values and the second level refers to an individual value in that row.

Almost there with your 2-d array, you need to specify the size like:

#define IMAGE_BYTELEN 16
static const uint8_t PROGMEM image[][IMAGE_BYTELEN] = {
    {0x01,0x02,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xfe,0x03,0xde,0x07,0xff,0x03,0xde},
    {0x0f,0xff,0xc3,0xde,0x1f,0xff,0xe3,0xde,0x3f,0x07,0xe3,0xde,0x3e,0x79,0xf3,0xde},
    {0x7d,0xfc,0xf3,0xde,0x7d,0xfe,0xf3,0xde,0x7b,0xfe,0xfb,0xde,0x7b,0xde,0x7b,0xde},
    {0x7b,0xde,0x7b,0xde,0x7b,0xde,0x7b,0xde,0x7b,0xde,0x7b,0xde,0x7b,0xdf,0x7f,0xde},
    {0x7b,0xdf,0x7f,0xde,0x7b,0xcf,0x7f,0xbe,0x7b,0xcf,0xbf,0x3c,0x7b,0xcf,0xcc,0x7c},
    {0x7b,0xc7,0xf1,0xf8,0x7b,0xc3,0xff,0xf8,0x7b,0xc1,0xff,0xf0,0x7b,0xc0,0xff,0xc0},
    {0x7b,0xc0,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xc0},
};

uint8_t getImagePixel( uint16_t img, uint16_t pix )
{
  return pgm_read_byte( (char *)(image + img) + pix );
}

And note that access with pgm_read_byte() is probably not immediately obvious.

Yours,
TonyWilk