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