#include "d:\Practice Programs\Puzzle Feuer\Puzzles\defs.h" struct S1 { char *s; struct S1 *s1p; }; void main() { // S1 a[] = { in cpp you do not have to qualifies S1 as a struct cpp's pre-compiler knows that. static struct S1 a[] = { { "abcd", a+1 }, { "efgh", a+2 }, { "ijkl", a } }; struct S1 *p[3]; int i; for( i=0; i<3; i++ ) p[i] = a[i].s1p; PRINT3(s, p[0]->s, (*p)->s, (**p).s); swap(*p,a); PRINT3(s, p[0]->s, (*p)->s, (*p)->s1p->s); swap(p[0], p[0]->s1p); PRINT3(s, p[0]->s, (*++p[0]).s, ++(*++(*p)->s1p).s); }// end main /****************** p[]: is an array of pointers of S1 type structures, s is a character pointer in an S1 type structure, p[0]->s: p[0] first pointer in an array of pointers to S1 structures ->s points to the string in that structure. (*++p[0]).s: ++p[0] increment to second pointer to S1 type struc, *++p[0] de-reference that address (*++p[0]).s point to the char string in that second S1 structure. ++(*++(*p)->s1p).s: From the inner most parentheses; de-reference p to get address of struc, increment it to the next structure address, de-reference that pointer, get the s1p (the address of the next struc in the loop, increment that address then get the string pointer s in that S1 structure. In this example with three structures; A points to B points to C points back to A ++(*++(*p)->s1p).s will bring you back to what ever struc *p points to at start. ******************/ swap( struct S1 *p1, struct S1 *p2 ) { struct S1 temp; temp.s = p1->s; p1->s = p2->s; p2->s = temp.s; } // end swap...