A "jagged array" is a representation of a bi-dimensional array using an array of pointers that are addresses of other arrays.
They are typical for example, in represtentig set of strings.
In case of images, you can think to a
COLORREF
type to represent a pixel,
a
COLORREF*
to address a dynamic array of pixels (a row) and a
COLORREF**
to address a sequence of rows (the image itself).
It will give you something similar to
COLORREF** image = malloc(nrows * sizeof(COLORREF*));
for(unsigned i=0; i<nrows; ++i) image[i] = malloc(pixel_in_a_row * sizeof(COLORREF));
After such an initialization, image[r][c] will represent the pixel at row r and column c.
About "reading and storing" there are various standard format (JPG, PNG, BMP, ...). The simpler one is probably the BMP when storing "true colors"(24 or 32 bits per pixel) image.
Just check the MSDN about "Bitmap File Format".
Of course remember to
free
all what you
malloc
at end !