>printf("%s\n",*pa++);
You should re-read my explanation of pointers and arrays. When used in a value context, arrays are converted to pointers which are non-modifiable lvalues. In other words, you can change what the pointer points to, but not the pointer itself. K&R's example works because a function parameter is a copy of the argument passed to it. The copy is a modifiable lvalue because it isn't qualified as const.