Arrays in C exhibit peculiar behavior, one of which is their restricted assignability. Let's investigate why assigning one array to another is forbidden, as illustrated by the following code:
int numbers[5] = {1, 2, 3}; int values[5] = {0, 0, 0, 0, 0}; values = numbers; // Error: C2106
This code generates the error "error C2106: '=' : left operand must be l-value," signaling an attempt to assign to a non-modifiable object.
The error arises because arrays in C are considered non-modifiable or non-assignable, primarily due to backward compatibility with C. Assigning one array to another would require copying all its elements, which is highly inefficient and error-prone.
Instead, C encourages the use of containers from the Standard Template Library (STL), like std::array or std::vector, which provide efficient and type-safe array-like capabilities. For example, using std::array to achieve the desired functionality:
#include <array> std::array<int, 5> numbers = {1, 2, 3}; std::array<int, 5> values = {}; values = numbers; // No error!
In the case of primitive arrays (like the one in the original code), you can manually copy elements using a loop or leverage the std::copy function:
#include <algorithm> int numbers[5] = {1, 2, 3}; int values[5] = {}; std::copy(numbers, numbers + 5, values);
Additionally, the provided code demonstrates a shortcut for initializing the values array with empty values, taking advantage of a C rule that unprovided initializers result in value initialization to zero. Therefore, the following two code snippets are equivalent:
int values[5] = {0, 0, 0, 0, 0}; int values[5] = {};
By understanding these nuances, you can avoid assignment errors and effectively work with arrays in C .
The above is the detailed content of Why Can't I Directly Assign One Array to Another in C ?. For more information, please follow other related articles on the PHP Chinese website!