In C (and many other languages), space for arrays is typically allocated ahead of time, during compilation, and enough space is allocated to represent all of the elements in the array. For example, consider the following variable definition:
double bigArray[1000][1000];
Defining bigArray allocates enough space to hold 1,000,000 doubles. On the HP workstations used by this course, each double requires 8 bytes of memory, so this array requires 8 million bytes of memory. Even if we only use a few elements of this array, defining this variable will soak up all of this space. This is OK if we are going to actually use all of this space- but in many cases, we can do a lot better.
C's allocation method is very wasteful in the case of sparse arrays, where we know what most of the values are going to be ahead of time- it is quite wasteful to allocate vast amounts of memory to hold data that we'll never change and whose value we already know!