Course Content
Programming in C
About Lesson

Let’s look at the following function, that demonstrates how pointer arrays are initialised:

/* Return the name of the month, given a number.
 * Example: month_name(9) returns September.
 */
char *month_name(unsigned short n)
{
  static char *months[] = { 
    "Invalid month",
    "January",
    "February",
    "March",
    "April",
    "May",
    "June",
    "July",
    "August",
    "September",
    "October",
    "November",
    "December",
  };  
  return n > 12 ? months[0] : months[n];
}

The initialiser is a list of character strings; each is assigned to the corresponding position in the array. The characters of the i-th string are placed somewhere, and a pointer to them is stored in months[i]. As we haven’t specified the array size, the compiler counts the initialisers and uses that as the size.
Note that we need to declare months as static, since we are returning a pointer to the matching month name and the scope of automatic variables is the function boundary. So, if we return a pointer value to a string that is local, it would be invalid in the calling function.

Scroll to Top