Q:

How do I interpret the declaration char *x[5]?

My professor has a bit of code uploaded online, but I'm finding it hard to understand this variable:
char * x[5];

Does this represent 5 spaces x has for pointers to characters? 
So if I were to say
x[0]="Apple";

would this be valid?

A:

Does this represent 5 spaces x has for pointers to characters?

Yes.  One way to examine this is to evaluate sizeof(x), sizeof(x[0]), and sizeof(*x[0]).  On my x64 machine, those evaluate to 40, 8, and 1 -- pointers are 8 bytes long, so char* x[5] declares five pointers.

would x[0]="Apple"; be valid?

Yes, although it might not do what you expect.  Here, x[0] is being set to point to a string literal, and the values of x[1] through x[4] are undefined.  Note that because "Apple" is a string literal, it's read-only; you're not guaranteed to be able to modify it.

