references c
C ++에서 참조를 선언하고 사용하는 방법을 알아보십시오.
참조는 C ++ 프로그래밍 언어의 주요 개념입니다. 포인터만큼 강력하지는 않지만 효율적인 프로그램을 작성하는 데 사용할 수 있습니다. 참조 변수의 주요 용도는 매개 변수를 함수에 전달하는 것입니다.
인기있는 '참조에 의한 전달'매개 변수 전달 기술은 참조를 사용합니다. 이 튜토리얼에서는 참조가 무엇인지, 그리고 그것을 선언하고 사용하는 방법을 볼 것입니다. 또한 포인터와 참조의 차이점과 함수에 대한 참조 전달 및 반환에 대해서도 설명합니다.
=> 전체 C ++ 자습서 목록을 탐색하려면 여기를 참조하십시오.
학습 내용 :
참조 란 무엇입니까?
참조는 변수의 별칭 또는 다른 이름입니다. 식별자가있는 변수가 주어지면이 변수에 다른 식별자를 제공하여 원래 이름이나 다른 이름으로이 변수를 참조 할 수 있습니다. 이 '다른 이름'을 참조라고합니다.
값이 17 인 변수 'i'가 있다고 가정합니다. j가 참조이면 변수 i와 참조 j의 메모리 표현이 아래에 표시됩니다.
위의 그림에서 볼 수 있듯이 변수와 별칭은 동일한 값을 가리키는 참조 지점입니다.
참조 변수 선언
참조는‘&’연산자를 사용하여 선언 할 수 있습니다.
참조 선언은 아래와 같습니다.
int a = 10; int& refvar = a;
그래서 위의 코드에서 우리는 값이 10 인 정수 변수를 선언했습니다. 그런 다음 또 다른 변수 refvar를 선언하고 여기에 변수를 할당합니다. refvar를 선언하는 동안 변수 이름 바로 앞에 & 연산자를 사용했습니다. 이것은 refvar가 이미 존재하는 변수에 대한 참조임을 나타냅니다.
변수 이름 a를 사용하거나 참조 이름 'refvar'를 사용하여 변수 'a'를 참조 할 수 있습니다.
Windows를위한 최고의 작업 관리 소프트웨어
다음은 참조의 간단한 예입니다.
#include #include using namespace std; int main() { int age = 22; int& numYears = age; double salary = 10000.00; double& wages = salary; cout<<'Age: '< 산출:
나이 : 22
NumYears : 22
연봉 : 10000
임금 : 10000
위의 코드에는 정수 변수 연령이 있습니다. 다음으로, 참조 정수 변수 numYears를 age 변수에 선언합니다. double 유형의 또 다른 가변 급여가 있습니다. 다음으로 가변 급여에 대한 이중 참조 가변 임금을 선언합니다.
다음으로 변수를 인쇄합니다. 첫 번째 나이와 참조 뒤에 급여와 참조가 표시됩니다. 프로그램의 출력을 확인하면 변수와 그에 대한 참조가 동일한 값을 가리 키므로 급여 및 임금뿐만 아니라 Age 및 numYears가 동일한 값을 가짐을 이해합니다.
참조 대 포인터
포인터와 비교할 때 참조가 더 안전하고 사용하기 쉽습니다.
포인터와 참조 간의 몇 가지 차이점에 대해 설명합니다.
- 포인터와 달리 참조는 null 값을 가질 수 없습니다. 참조에는 값이 할당되어야합니다.
- 참조는 생성되는 순간 초기화됩니다. 이와 달리 포인터는 선언 중에는 반드시 초기화 할 수있는 것이 아니라 언제든지 초기화 할 수 있습니다.
- 포인터를 값에 쉽게 재 할당 할 수 있습니다. 그러나 참고 문헌으로는 이것을 할 수 없습니다. 변수 값이 할당되면, 즉 변수의 별칭이 생성되면이 참조에 다른 변수를 할당 할 수 없습니다.
- 우리는 무효 참조가 없습니다. 정의에 따라 참조는 변수의 별칭이며 생성 자체 중에 초기화됩니다. 따라서 무효 참조를 갖고 나중에 구체적인 데이터 유형을 가진 변수를 할당 할 가능성이 없습니다. 반대로, 우리는 void 포인터를 가질 수 있습니다.
위에서 설명한 이러한 제한으로 인해 C ++의 참조는 연결 목록과 같은 데이터 구조와 함께 사용할 수 없습니다. Java에서는 참조에 대한 이러한 모든 제한이나 제한이 없습니다.
함수에 대한 참조 전달
함수에 대한 이전 자습서에서 이미 '참조에 의한 전달'매개 변수 기술에 대해 논의했으며이 기술을 사용하여 두 숫자의 스와핑 예제를 보았습니다. 이 섹션에서는이 기술에 대한 설명을 건너 뛰고 스왑 기능을 다시 한 번 예로 제시합니다.
그러나 이번에는 숫자를 바꾸는 대신 두 개의 문자열을 바꿀 것입니다.
애니메이션을 무료로 보는 방법
#include #include using namespace std; void swap(char * &str1, char * &str2) { char *temp = str1; str1 = str2; str2 = temp; } int main() { char *str1 = 'references'; char *str2 = 'pointers'; cout<<'str1 = '< 산출:
str1 = 참조 str2 = 포인터
스왑 후….
str1 = 포인터 str2 = 참조
따라서이 프로그램에서는 문자열 (char *)을 swap 함수에 전달합니다. 형식 매개 변수는 char * 유형의 변수에 대한 두 가지 참조입니다. 두 값이 스왑 될 때 매개 변수에 대한 참조 / 별칭을 사용하므로 해당 수정 사항이 호출 함수에 반영됩니다.
참조 반환
함수에서 포인터를 반환하는 것처럼 함수에서 참조를 반환 할 수도 있습니다. 함수에서 참조를 반환하면 반환 값에 대한 암시 적 포인터도 반환됩니다. 이러한 이유로 참조를 반환하는 함수는 할당의 왼쪽에서 사용할 수 있습니다.
함수에서 참조를 반환하는 예제를 살펴 보겠습니다.
#include using namespace std; int myarray[] = {1, 0, 2, 3, 5}; int& setValues( int i ) //returns reference to the array { return myarray[i]; } int main () { cout << 'myarray before change' << endl; for ( int i = 0; i < 5; i++ ) { cout << 'myarray[' << i << '] = '; cout << myarray[i] << endl; } setValues(1) = 1; setValues(3) = 8; cout << 'Value after change' << endl; for (int i = 0; i < 5; i++ ) { cout<< 'myarray[' << i << '] = '; cout << myarray[i] << endl; } return 0; }
산출:
변경 전 myarray
myarray [0] = 1
myarray [1] = 0
myarray [2] = 2
myarray [3] = 3
myarray [4] = 5
변경 후 가치
myarray [0] = 1
myarray [1] = 1
myarray [2] = 2
myarray [3] = 8
myarray [4] = 5
동일한 스크린 샷은 다음과 같습니다.
위의 코드에서 볼 수 있듯이 참조와 정수인 매개 변수를 반환하는 함수 setValues를 정의합니다. 함수 내에서 C ++의 위치 I에 대한 배열 참조를 반환합니다.
주 함수에서 배열의 값을 인쇄합니다. 그런 다음 setValues 함수를 사용하여 배열에있는 두 요소의 값을 변경합니다. 다시 우리는 배열의 값을 인쇄합니다.
참조에서 주목해야 할 한 가지는 데이터가 정적이거나 전역일 때만 함수가 참조를 반환하도록 할 수 있다는 것입니다. C ++에서 지역 변수에 대한 참조를 반환하는 것은 불법입니다.
결론
독자는 참조의 주요 용도가 매개 변수를 함수에 전달하는 것임을 유의해야합니다.
다음 자습서에서는 C ++의 객체 지향 프로그래밍으로 이동하기 전에 C ++의 람다 함수 / 표현식을 다룰 것입니다.
=> 여기에서 최고의 C ++ 교육 자습서를 확인하십시오.
추천 도서