In C++ (references to arrays), identify the correctness of binding a reference to an array and the subsequent prints. What happens with the following code?
#include
int main()
{
int arr[] = {1, 2, 3, 4, 5};
int &zarr = arr; // attempt to bind an int& to an int[5]
for (int i = 0; i <= 4; i++)
{
arr[i] += arr[i];
}
for (i = 0; i <= 4; i++)
cout << zarr[i];
return 0;
}
-
AThe program will print the output 1 2 3 4 5.
-
BThe program will print the output 2 4 6 8 10.
-
CThe program will print the output 1 1 1 1 1.
-
DIt will result in a compile time error.
Answer
Correct Answer: It will result in a compile time error.
Explanation
Introduction / Context: This checks your understanding of references to arrays in C++. A reference to a single int cannot be bound to an entire array. The correct type for a reference to this array would be int (&zarr)[5], not int &zarr.
Given Data / Assumptions:
- arr has type int[5].
- The code uses int &zarr = arr; which is ill-formed.
- There is also a scope issue with i in the second loop in older compilers.
Concept / Approach: Type binding rules require exact matching for references: an int& cannot bind to an int[5]. You must write int (&zarr)[5] = arr; to alias the entire array. Otherwise, the program fails at compile time.
Step-by-Step Solution:
Compilation fails on the line binding zarr. If corrected to int (&zarr)[5], both loops would double each element and print 2 4 6 8 10.Verification / Alternative check: Modern compilers clearly report a type mismatch for binding int& to int[5].
Why Other Options Are Wrong: They assume successful compilation and execution.
Common Pitfalls: Confusing references to the first element (int&) with references to the whole array type (int (&)[N]).
Final Answer: It will result in a compile time error.