Well if we look at the one way to write it, char **argv, remember that an array decays to a pointer to the first element. This means that looking from right to left, argv is the identifier, and the * is the first dimension of the array, followed by the type of the elements, char *. char *argv[] communicates the same information in a different way: the brackets mean that we have a one dimensional array of variable length, and char * is the type of the elements.