Difficulty: Easy
Correct Answer: hello
Explanation:
Introduction / Context:
This short puzzle shows that applying address-of (&
) and dereference () operators in alternating fashion can cancel out, if they are applied in a type-consistent way. The format string
%s
expects a char*
to a null-terminated string.
Given Data / Assumptions:
p
points to the string literal "hello"
.printf("%s\n", ...)
.
Concept / Approach:
Reading right-to-left for unary operators: the innermost is &p (address of p
), then (&p) which yields p
, then &((&p)) which is &p
again, and finally (&p) which returns p
. So the entire expression is simply p
, a char
to the literal.
Step-by-Step Solution:
Evaluate &&p → pprintf receives p as a char*It prints the full null-terminated string: hello
Verification / Alternative check:
Replacing the expression with just p
yields identical output.
Why Other Options Are Wrong:
(a), (c), and (d) suggest starting at later characters; nothing in the code increments the pointer. (e) There is no invalid access here; reading a string literal via %s
is fine (modification would not be).
Common Pitfalls:
Assuming address-of and dereference operators always change the value; when paired correctly, they cancel out.
Final Answer:
hello
Discussion & Comments