Click on arrays.c to get source.
/* File CExamples/arrays.c */
#include <stdio.h>
#include <stdlib.h> /* for calloc */
int main(void)
{int digits[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
 /* the dimension is optional and will be determined by the compiler
    note that char name[] = "Erich";      is a shorthand for
              char name[6] = {'E', 'r', 'i', 'c', 'h', '\0'}; */
 float* xptr[5]; /* array of pointers to float */
 float xy[5][6] = {{0.0, 0.1, 0.2, 0.3, 0.4, 0.5},
                   {1.0, 1.1, 1.2, 1.3, 1.4, 1.5},
                   {2.0, 2.1, 2.2, 2.3, 2.4, 2.5},
                   {3.0, 3.1, 3.2, 3.3, 3.4, 3.5},
                   {4.0, 4.1, 4.2, 4.3, 4.4, 4.5}};
 int i, j;

 printf(
        "digits[4] == %d, *(digits+4) == %d,\n*( (int*) ( (char*)digits+4*sizeof(int) )) == %d\n\n"
       ,digits[4]
       ,*(digits+4)
       ,*( (int*) ( (char*)digits+4*sizeof(int) ))
       );

 printf("sizeof(float[5][6]) == %d\n\n", (int)sizeof(float[5][6]) );

 printf("sizeof(xy[0]) == %d, sizeof(xy[0][0]) == %d\n\n"
        ,(int)sizeof(xy[0]), (int)sizeof(xy[0][0]) );

 i = 2; j = 3;
 printf("i == %1d, j == %1d\n", i, j);
 printf("&xy[0][0] == %p,     &xy[i][0] == %p\n", &xy[0][0], &xy[i][0] );
 printf("(float*)xy == %p,    (float*) (xy+2) == %p\n",
        (float*)xy, (float*)(xy+2) );
 printf("(float*)xy[2] == %p, (float*)*(xy+2) == %p\n\n",
        (float*)xy[2], (float*)*(xy+2) );

 printf("1. xy[2][3]                == %4.1f\n\n", xy[2][3]);
 printf("2. *(xy[2]+3)              == %4.1f\n\n", *(xy[2]+3));
 printf("3. *(*(xy + 2) + 3)        == %4.1f\n\n", *(*(xy + 2) + 3));
 printf("4. *((float*)xy + 2*6 + 3) == %4.1f\n\n", *((float*)xy + 2*6 + 3));
 printf("5. (*(xy+2))[3]            == %4.1f\n\n",
        (*(xy+2))[3]); /* Wen-shin's way */
 printf("6. *(&xy[0][0] + 2*6 + 3)  == %4.1f\n\n",
        *(&xy[0][0] + 2*6 + 3)); /* the 6th version */ 
 printf("7. *(float*)((unsigned char*)xy + sizeof(float)*(2*6 + 3)) == %4.1f\n\n",
        *(float*)((unsigned char*)xy + sizeof(float)*(2*6 + 3))); /* the 7th ver. */
 printf("7.1. *(float*)((unsigned char*)xy \n%s == %4.1f\n\n",
        "                    + sizeof(xy[0])*2 + sizeof(xy[2][3])*3",
        *(float*)((unsigned char*)xy + sizeof(xy[0])*2 + sizeof(xy[2][3])*3 ) );
 printf("8. *(float*)((unsigned char*)xy[2] + sizeof(float)*3)      == %4.1f\n\n\n",
        *(float*)((unsigned char*)xy[2] + sizeof(float)*3) );

 /* initialize the array of pointers */
 for(i=0; i<=4; i++)
    {xptr[i] = (float *)calloc(6, sizeof(float));
     for(j=0; j<6; j++)
        *(xptr[i] + j) = i + 0.1 * j;
    } /* end for i */

 printf("1. xptr[2][3]         == %4.1f\n\n", xptr[2][3] );
 printf("2. *(xptr[2]+3)       == %4.1f\n\n", *(xptr[2]+3) );
 printf("3. *(*(xptr + 2) + 3) == %4.1f\n\n", *(*(xptr + 2) + 3) );
 printf("5. (*(xptr+2))[3]     == %4.1f\n\n", (*(xptr+2))[3] ); /* Wen-shin's way */
 printf("8. *(float*)((unsigned char*)xptr[2] + sizeof(float)*3) == %4.1f\n\n",
        *(float*)((unsigned char*)xptr[2] + sizeof(float)*3) );

 for(i=0; i<=4; i++) free(xptr[i]);
 return 0;
}