#include "d:\Practice Programs\Puzzle Feuer\Puzzles\defs.h" // win 98 is 32 bit platform. So int is 32 bit. /**** SEE BOOK FOR DIAGRAM. MAKES THIS VERY CLEAR. *****/ int a[] = { 0, 1, 2, 3, 4 }; int *p[] = { a, a+1, a+2, a+3, a+4 }; int **pp = p; // a[] is an int array. // p[] is an array of int addresses // pp is a double pointer to an array of int pointers // 'pp' points to 'p' which points to a[0] main() { // '*p' de-references the pointer 'p' to show what the pointer points to. PRINT2(d,a,*a); //a = 4218928 *a = 0 PRINT3(d,p,*p,**p); //p = 4218952 *p = 4218928 **p = 0 PRINT3(d,pp,*pp,**pp); //pp = 4218952 *pp = 4218928 **pp = 0 NL; //'pp' has ad of 'p', '*pp' is what 'p' holds, the ad of'a' //'**pp' is a double de-references of 'pp' //which give what 'a' holds. 'a' == 'a[0]' /* pp = p, *pp = a, **pp = a[0] */ pp++; //now pp double ref points to a[1] = 1, p points to a=a[0]=0, So 1-0=1 PRINT3(d,pp-p,*pp-a,**pp); //pp-p = 1 *pp-a = 1 **pp = 1 *pp++; PRINT3(d,pp-p,*pp-a,**pp); //pp-p = 2 *pp-a = 2 **pp = 2 *++pp; PRINT3(d,pp-p,*pp-a,**pp); //pp-p = 3 *pp-a = 3 **pp = 3 ++*pp; PRINT3(d,pp-p,*pp-a,**pp); //pp-p = 3 *pp-a = 4 **pp = 4 NL; pp=p; // pp to **pp++; PRINT3(d,pp-p,*pp-a,**pp); //pp-p = 1 *pp-a = 1 **pp = 1 *++*pp; PRINT3(d,pp-p,*pp-a,**pp); //pp-p = 1 *pp-a = 2 **pp = 2 ++**pp; PRINT3(d,pp-p,*pp-a,**pp); //pp-p = 1 *pp-a = 2 **pp = 3 }// end main