Q:

Confusion about array declaration

What does this mean in C:
char strings[USHRT_MAX][50];

Is it creating a jagged array of characters called strings?

A:

No, the above does not create a jagged array of strings. It creates an array of characters with two dimensions, capable of storing up to USHRT_MAX C strings of up to 49 characters in length (the fiftieth char is used for the '\0' terminator).
A jagged array declaration would look like this:
char *strings[USHRT_MAX];

With an array of pointers you would need to allocate memory for the individual strings, but the strings could differ in length from one element to the other. Your array, on the other hand, has all memory allocated, but it places a limit on the length of strings, and has a potential of using more memory than you need to store shorter strings.

