c - Strange wording in the standard, concerning comparison of pointers -


§6.5.8\6 (concerning >, <, <=, >=)

if expression p points element of array object , expression q points last element of same array object, pointer expression q+1 compares greater p . in other cases, behavior undefined.

several sections above, §6.5.8, explained basically, pointer arithmetic work expected on arrays. int a[3]; int *p = a; int *q = &a[2]; //q-p == 3 valid. however, read above q > p ub.

what missing?

firstly, have quoted part of paragraph, first part explains referencing, include paragraph here:

when 2 pointers compared, result depends on relative locations in address space of objects pointed to. if 2 pointers object types both point same object, or both point 1 past last element of same array object, compare equal. if objects pointed members of same aggregate object, pointers structure members declared later compare greater pointers members declared earlier in structure, , pointers array elements larger subscript values compare greater pointers elements of same array lower subscript values. pointers members of same union object compare equal. if expression p points element of array object , expression q points last element of same array object, pointer expression q+1 compares greater p. in other cases, behavior undefined.

basically, bit referencing refers fact pointer must always point either stand alone object, element of array of objects or one past end of array of objects. can see, incrementing pointer points last element of array yield invalid pointer, , indeed pointer in standard must never dereferenced, can used 1 special case can set or compared pointer.

this useful in program in increment pointer check if past end of array , terminate if does. example.

int foo = 0; int arrsize = 6; int bar[arrsize]; while(foo < arrsize) {     foo++;     printf("%d", bar + 3 < bar + foo); } 

will legal, in last case foo points 1 beyond end of array.

note example contrived demonstrates point.

if not rule program undefined behaviour.


Comments

Popular posts from this blog

jquery - How can I dynamically add a browser tab? -

node.js - Getting the socket id,user id pair of a logged in user(s) -

keyboard - C++ GetAsyncKeyState alternative -