It is an array containing pointers to characters.
Thus, argv[0] is actually a pointer to an area of memory containing the characters of the first argument (actually the command name).
In C, arrays are not bound checked - there is no implicit size of the array. In the case of argv, you can tell the number of arguments via argc.
To find the length of the individual arguments in each element of argv, you can use the fact that character strings are terminated with null characters.
The statement that it 'decays to char **argv' refers to the near equivalence of arrays and pointers in C. In most regards, you can treat an array variable as a pointer to the first element in the array.
There are some important differences between arrays and pointers, though, so some caution is required. See for example this article for some more depth.