Bartc said:
Perhaps it might be better not to make too much of this sort of thing.
Concepts which have been perfectly obvious to C programmers for years
suddenly are in doubt when you bring up these subtle definitions.
End result: more confusion.
There's no real ambiguity in the underlying concepts. Objects and
values are clearly different things, and we don't have much trouble
distinguishing between, an object of type int (say, i) and a value of
type int (say, 42 -- you knew I'd pick 42, didn't you?). Even if we
look at ``i'' as an object vs. ``i'' as an expression (that evaluates
to the current value of the object ``i'', which happens to be 42) most
don't have much trouble keeping things straight.
Similarly, there's no real problem distinguishing between an object of
pointer type (say, p) and a value of pointer type (say, &i or
(void*)0). I think the only reason there's any confusion in this area
is that the unqualified phrase "a pointer" is used by some people only
to refer to an object of pointer type, and by others (and by the
standard) to refer to a value of pointer type.
The confusion is unfortunate, but it's really not that hard to avoid.