Difficulty: Medium
Correct Answer: ink
Explanation:
Introduction / Context:
This problem examines indexing through an array of char
, then through an array of pointers to those pointers, and finally performing pointer arithmetic to print a substring. Understanding the types at each dereference level is essential.
Given Data / Assumptions:
s
is an array: {"black", "white", "pink", "violet"} with indices 0..3.ptr
is an array of char
: {s+3, s+2, s+1, s}.p
is a char
used to walk through ptr
.
Concept / Approach:
After p = ptr;
, p
is s+3
. The pre-increment ++p
advances to ptr[1]
which is s+2
. Dereference steps: p
is s+2
, **p
is (s+2)
which equals s[2]
→ the string literal "pink". Adding 1 to a char
skips the first character and yields the substring starting at index 1.
Step-by-Step Solution:
After ++p, **p == s[2] == "pink"
.Compute **p + 1
→ pointer to the substring of "pink" starting at index 1.The substring is "ink".printf prints "ink".
Verification / Alternative check:
Print **p
first to confirm it is "pink"; then print **p + 1
to see the substring shift.
Why Other Options Are Wrong:
"ack", "ite", and "let" correspond to substrings from "black", "white", and "violet" respectively, not selected by the given pointer path.
Common Pitfalls:
Miscounting the pre-increment step or confusing which string index *p
resolves to. Also, forgetting that + 1
on a char
advances by one character.
Final Answer:
ink
Discussion & Comments