C의 배열은 독특한 동작을 나타내며, 그 중 하나는 제한된 할당입니다. 다음 코드에 설명된 대로 한 배열을 다른 배열에 할당하는 것이 금지된 이유를 조사해 보겠습니다.
int numbers[5] = {1, 2, 3}; int values[5] = {0, 0, 0, 0, 0}; values = numbers; // Error: C2106
이 코드는 "오류 C2106: '=' : 왼쪽 피연산자는 l-값이어야 합니다."라는 오류를 생성합니다. 수정 불가능한 객체에 할당하려는 시도.
이 오류는 주로 이전 버전과의 호환성으로 인해 C의 배열이 수정 불가능하거나 할당 불가능으로 간주되기 때문에 발생합니다. 한 배열을 다른 배열에 할당하려면 모든 요소를 복사해야 하는데 이는 매우 비효율적이고 오류가 발생하기 쉽습니다.
대신 C는 std와 같은 표준 템플릿 라이브러리(STL)의 컨테이너 사용을 권장합니다. :array 또는 std::Vector는 효율적이고 유형이 안전한 배열과 유사한 기능을 제공합니다. 예를 들어 원하는 기능을 달성하기 위해 std::array를 사용합니다.
#include <array> std::array<int, 5> numbers = {1, 2, 3}; std::array<int, 5> values = {}; values = numbers; // No error!
기본 배열의 경우(원래 코드의 배열과 같은) 루프를 사용하여 요소를 수동으로 복사하거나 std::copy 함수:
#include <algorithm> int numbers[5] = {1, 2, 3}; int values[5] = {}; std::copy(numbers, numbers + 5, values);
또한 제공된 코드는 다음과 같은 C 규칙을 활용하여 값 배열을 빈 값으로 초기화하는 지름길을 보여줍니다. 제공되지 않은 초기화 프로그램은 값을 0으로 초기화합니다. 따라서 다음 두 코드 조각은 동일합니다.
int values[5] = {0, 0, 0, 0, 0}; int values[5] = {};
이러한 차이를 이해하면 할당 오류를 방지하고 C에서 배열을 효과적으로 사용할 수 있습니다.
위 내용은 C에서 하나의 어레이를 다른 어레이에 직접 할당할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!