The semantic meaning of that syntax changes where it appears. If it's in a function (or in a more global scope), it's an array of pointers to char. If it's in a function declaration, it's a pointer to pointer to char.