I am currently preparing for an exam, and refreshing my pointer knowledge.
I am looking at this small exercise:
Consider the follow fragments of C programs. For each program, fill in the empty underlined spots such that the final value of the variable x is 0.
int x;
int *p;
p = &_____;
*p = _____;
I assume that the first underline is p = &x. I am little confused about the second one though. What is the difference between p = and *p = in this situation, given that we already have int *p?
CodePudding user response:
int *p;
... declares p
as a variable of type int *
(a pointer to int
). Given that this code overall can be valid only if it appears inside a function, that declaration does not assign a value to p
. As a result, the expression *p
is not (yet) meaningful immediately after that declaration, despite being syntactically correct.
The subsequent
p =
assigns a value to (pointer) p
. Your idea of p = &x;
seems plausible. But this is about the value of pointer p
itself, not about the value of the object to which p
points.
Once p
actually points to an object courtesy of the assignment to it, the value of the object to which it points can be accessed via *p
, and in particular, a value can be assigned to the pointed-to object via *p = <value here>;
.
Perhaps the thing tripping you up is that in no case is the *
part of the name of the pointer. In the declaration on line 2, it is part of the type (int *
) declared for variable p
. In the assignment on line 4, it is a unary operator applied to variable p
.