Difficulty: Easy
Correct Answer: 8, 10
Explanation:
Introduction / Context:
This exercise reinforces how C stores multi-dimensional arrays (row-major order) and how to interpret pointers to specific elements versus a pointer to the beginning of the array treated as a flat sequence.
Given Data / Assumptions:
arr is a 2 x 2 x 2 array initialized with 8 integers: 10, 2, 3, 4, 5, 6, 7, 8 in order.p is set to the address of arr[1][1][1] (the last element).q is set to (int)arr, the start of the contiguous memory.
Concept / Approach:
Row-major means the rightmost index varies fastest. With the provided initializer, the elements fill in natural index order. Therefore, the first element arr[0][0][0] is 10 and the last arr[1][1][1] is 8.
Step-by-Step Solution:
Evaluate *p: since p = &arr[1][1][1], dereferencing yields 8.Evaluate q: q points to the beginning of arr, which is arr[0][0][0] = 10.Thus, the output is "8, 10".
Verification / Alternative check:
List indices explicitly: arr[0][0][0]=10, [0][0][1]=2, [0][1][0]=3, [0][1][1]=4, [1][0][0]=5, [1][0][1]=6, [1][1][0]=7, [1][1][1]=8.
Why Other Options Are Wrong:
Reversing the pair (10, 2) ignores which pointer points where. "8, 1" invents a non-existent value. "Garbage values" is incorrect because all pointers used are valid and initialized.
Common Pitfalls:
Forgetting that casting to (int) and dereferencing gives the first element, not dimensions or sizes.
Final Answer:
8, 10
Discussion & Comments