void Test2DArray1(void)
{
  double points[3][4] = { {1.0,  2.0,  3.0,  4.0}, 
                          {5.0,  6.0,  7.0,  8.0}, 
                          {9.0, 10.0, 11.0, 12.0}};           

  printf("points = %p\n", (void *)points);               /* address of entire array */
  printf("&points = %p\n", (void *)&points);             /* address of entire array */
  printf("points[0] = %p\n", (void *)points[0]);         /* address of first row    */
  printf("&points[0] = %p\n", (void *)&points[0]);       /* address of first row    */
  printf("*points = %p\n", (void *)*points);             /*   same as above         */
  printf("&points[0][0] = %p\n", (void *)&points[0][0]); /* address of first double */
  printf("\n");
  printf("**points = %f\n", **points);       /* first double */
  printf("*points[0] = %f\n", *points[0]);   /* first double */
  printf("points[0][0]=%f\n", points[0][0]); /* first double */
  printf("\n");
  printf("sizeof(points) = %lu\n", sizeof(points));           /* sizeof entire array  */
  printf("sizeof(*points) = %lu\n", sizeof(*points));         /* sizeof of first row  */
  printf("sizeof(**points) = %lu\n", sizeof(**points));       /* sizeof first element */
  printf("sizeof(points[0]) = %lu\n", sizeof(points[0]));     /* sizeof first row     */
  printf("sizeof(points[0][0])=%lu\n", sizeof(points[0][0])); /* sizeof first element */
  printf("sizeof(&points)=%lu\n", sizeof(&points));           /* sizeof a pointer     */
}