bobvan (11/05/82)
In the spirit of the recent C puzzles book, here is one to think about: Given that we have declarations #define SIZE 10 int array[SIZE]; int i, *ip; most C programmers recognizes that the following construction clears the array: for (i=0; i<10; i++) array[i] = 0; Most experienced C programmers have learned to recognize the following construction as a more efficient alternative: for (ip=array; ip<&array[10]; ip++) *ip = 0; Using pointers doesn't save much on a machine like a VAX that has indexing hardware, but makes a world of difference on an 8080. Now suppose that we extend this to a two dimensional array: #define XSIZE 10 #define YSIZE 10 int array2d[XSIZE][YSIZE]; int *ip; for (ip=&array2d[XSIZE][YSIZE]; ip<&array2d[XSIZE][YSIZE]; ip++) *ip = 0; I recently got bitten making this hasty generalization and will feel better if someone else has to think about for a while to see the error. Can you see the bug in the above fragment? It is a shame that I have to ask you not to reply to the net. Mail to me and I'll post a tally of the answers in a few days. Comments about the appropriateness of such puzzles are welcome. Bob Van Valzah (...!decvax!ittvax!tpdcvax!bobvan)