TOC | Prev | Next

Pointer math

Pointers and arrays are interchangeable.

pointer-math.c

#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.

$ pointer-math

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.

TOC | Prev | Next