this is probably an essentially trivial thing, but it somewhat escapes me, thus far..
char * a3[2]; a3[0] = \"abc\"; a3[1] = \"def\"; char ** p;
a3 is a constant pointer, you can not increment it. "p" however is a generic pointer to the start of a3 which can be incremented.