>백엔드 개발 >C++ >C에서 하나의 어레이를 다른 어레이에 직접 할당할 수 없는 이유는 무엇입니까?

C에서 하나의 어레이를 다른 어레이에 직접 할당할 수 없는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-03 02:57:09952검색

Why Can't I Directly Assign One Array to Another in C  ?

C의 배열: 할당 제한 이해

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.