"R.Wieser" <add...@not.available> writes:
> "Keith Thompson" <
Keith.S.T...@gmail.com> wrote in message
> news:87wn5eg...@nosuchdomain.example.com...
>
>> If I understand you correctly, the two things you're referring to are
>> the pointer *value* and an *object* of pointer type that holds that
>> value.
>
> I do not call it an object, to me its just a variable. Anything beyond that
> (an object wich might contain other properties as well as methods) is (way)
> outside of my scope.
The word "object" is not about object-oriented programming. The C
standard defines an "object" as a "region of data storage in the
execution environment, the contents of which can represent values"; it
doesn't use the term "variable". The C++ standard uses the word "object" in the
same way, though it doesn't have quite the same formal definition.
An "object" is just a variable, except that a variable typically has a
name.
>> There's nothing special about pointers to strings here.
>> The same confusion occurs with, for example, a pointer to an int
>
> Indeed. But if there is one thing I've learned from Usenet it is that you
> need to keep the context to a question simple. Referring to all the other
> adresses and what they point to would just be "muddying the water".
>
>> Usually this isn't a problem. In most contexts, the distinction
>> between a value of some type and an object/variable that holds a
>> value of some type either *isn't important or is sufficiently clear
>> from the context*.
>
> Agreed.
>
> But thats the crux : somethimes I get the distinct feeling that someone is
> talking about the address (pointing to a string or otherwise), but than
> suddenly seems to talk about the variable holding it. :-\
Yes, people are often informal, or even sloppy, about the distinction.
>> For cases where the ambiguity is important, I find it useful
>> to think of the word "pointer" (as well as "array", "integer",
>> etc.) as an adjective rather than a noun. Thus we can refer to a
>> *pointer value*, or a *pointer object", or a *pointer type*, or a
>> *pointer expression*, all of which are clearly distinct concepts.
>
> I think I can translate "pointer value" as to be meaning an address. For
> the others ? I do not have the foggiest I'm afraid.
For example, `int*` and `char*` are pointer types.
A pointer value is the result of evaluating an expression of pointer
type, including an expression that simply yields the value stored in an
object/variable. That value can be the address of an object (or of a
function, but let's set that aside), or it can be a null pointer (there
are other possibilities).
A pointer expression is a chunk of text in a C or C++ program,
interpreted as an expression that, when evaluated, will yield a result
of pointer type.
>> <OT>
>
> Whoooo.... Is that *on*, of *off* topic ? Not that it matters much which
> one though. :-)
"<OT>" means off-topic. I marked the last part of my article that way
because it discusses C, while the topic of this newsgroup is C++, a
distinct language.
You raised the issue of the ambiguity between a "pointer" as a value and
a "pointer" as an object in the context of a "pointer to a string",
which is a C-specific context. I'm trying to steer the discussion in a
direction that applies to both languages. (I might suggest posting to
comp.lang.c, but I'm not sure it would be useful.)
>> For C's definition of a "pointer to a string", I'd say it refers
>> to a *value* of pointer type.
>
> AFAIK most people do not use that phrase but use the (shorthand) "string
> pointer" (with or without the space) instead. But yes, I would also.
Sure, "string pointer" means the same thing as "pointer to a string".
It's slightly informal, but not likely to be ambiguous.
> Though thats the whole problem to me : most people seem to use that "string
> pointer" phrase for the addres (the "value of pointer type") *as well as*
> the variable (or worse : an object) its stored in.
>
> But I think I am going to stop asking. It looks like the destinction
> between the address and what its stored in isn't of much, if any, importance
> to the people here.
Suggestion: Any time you read something specific that you find
confusing, ask about it. That's likely to be a lot easier than trying
to solve the general problem.
People with a lot of experience are likely to write in an informal
shorthand that assumes a similar level of experience in readers. It can
be ambiguous, but the ambiguity can be resolved *if* you have that
experience. If something is genuinely confusing, feel free to keep us
on our toes by asking about it.
--
Keith Thompson (The_Other_Keith)
Keith.S.T...@gmail.com
Working, but not speaking, for XCOM Labs
void Void(void) { Void(); } /* The recursive call of the void */