Difficulty: Easy
Correct Answer: ptr is an array of 30 pointers to integers.
Explanation:
Introduction:
Parsing mixed pointer–array declarations in C/C++ requires understanding declarator precedence. This question tests whether you can correctly interpret what the identifier represents when both * and [] appear in the declaration.
Given Data / Assumptions:
Concept / Approach:
In declarations, [] has higher binding precedence than . Therefore ptr[30] is considered first (an array of 30 elements). Each element has the remaining type * to int, i.e., pointer to int. So ptr is an array with 30 elements, and each element is an int.
Step-by-Step Solution:
1) Start from the identifier: ptr.2) Apply closest binding operator: [] → ptr[30] means “ptr is an array of 30”.3) Apply the remaining * to the element type: each element is a pointer to int (int).4) Final interpretation: ptr is an array (size 30) of pointers to int.
Verification / Alternative check:
Typical usage like ptr[i] = &someInt; compiles because ptr[i] has type int and can store the address of an int. Declaring a pointer to an array would require parentheses: int (*p)[30];
Why Other Options Are Wrong:
Pointer to an array of 30 integer pointers: that would be int **(*p)[30]; with different grouping.Array of 30 integer pointers: this is semantically the same as the correct option, but wording should clearly state “pointers to integers.”Array 30 pointers: grammatically incomplete and type-unspecified.
Common Pitfalls:
Forgetting that [] binds tighter than * leads many to read it as “pointer to array” rather than “array of pointers.” Always add parentheses if you intend pointer-to-array semantics.
Final Answer:
ptr is an array of 30 pointers to integers.
Discussion & Comments