> > It is no casuality they added this rule to the standard. They added > > it because is the idiomatic way of running over an array in C. Of > > course CS teachers that liked pascal don't teach it anymore when > > they were forced to move to C, but it is the best way for experienced
> The code in question was not comparing Q against P+1, it was > comparing Q against P, where `P = &array[len+1]`, which is a subtly > different case. The first increments a pointer by the size of one > element, while the second accesses the array element just after > the end of the array and obtains a reference to that point in > memory. The first is dealing with a number in memory, the second > is accessing memory to get a pointer to it. Nothing in the 3.3.8 > section affects this. Ok, I am not going to follow this discussion. If you want to understand this exception of pointer comparision you can find it in K&R book. Basically it says that a comparision with one position after the end of the array is valid. > > for (cp = colors; cp < &colors[LEN(colors)] + 1; cp++) LEN returns a value from 1 to N, and valid indexes for the array are from 0 to N-1. So cp < color[N] is the case described in the standard. Regards,
