Pointers and arrays are interchangeable.
#include <stdio.h> #define MAX_NAME 40 int main( void ) { int squares[10]; printf( "squares = %p\n", (void *)squares ); printf( "&squares[0] = %p\n", (void *)&squares[0] ); printf( "&squares[1] = %p\n", (void *)&squares[1] ); printf( "&squares[2] = %p\n", (void *)&squares[2] ); printf( "&squares[3] = %p\n", (void *)&squares[3] ); printf( "&squares[437] = %p\n", (void *)&squares[437] ); printf( "&squares[-5150] = %p\n", (void *)&squares[-5150] ); return 0; }
Note the complete lack of bounds checking.
squares = 0xbffff578 &squares[0] = 0xbffff578 &squares[1] = 0xbffff57c &squares[2] = 0xbffff580 &squares[3] = 0xbffff584 &squares[437] = 0xbffffc4c &squares[-5150] = 0xbfffa500
You don't care what the size of the referents is. The compiler
handles it for you.