What is the difference between array_name and &array_name?


One is a pointer to the first element in the array; the other is a pointer to the array as a whole.

An array is a type. It has a base type (what it's an array of ), a size (unless it's an "incomplete" array), and a value (the value of the whole array). You can get a pointer to this value:

char a[ MAX ];      /* array of MAX characters */
char *p;            /* pointer to one character */
/* pa is declared below */
pa = & a;
p = a;  /* = & a[ 0 ] */

After running that code fragment, you might find that p and pa would be printed as the same value; they both point to the same address. They point to different types of MAX characters.

The wrong answer is

char *( ap[ MAX ] );

which is the same as this:

char *ap[ MAX ];

This code reads, "ap is an array of MAX pointers to characters."


© 2017