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