만담 C 지침 제11강 - 매개 변수의 인용 전달
#include <iostream>
using namespace std;
void fun(int& x, int& y)
{
int t = x;
x = y;
y = t;
cout<<"x="<<x<<endl;
cout<<"y="<<y<<endl;
}
int main()
{
int a = 4;
int b=6;
fun(a, b);
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
return 0;
}
결과:
x = 6, y = 4.
a = 6, b = 4. /* 。*/
보입니다. 값 전달에 비해 코드 형식은 정의된 부분만 다릅니다.
Exchg3(int &x, int &y)
그러나 우리는 a와 b의 값이 대조된 것을 발견했다.이것은 Exchg3(a, b)에서 수정된 것이 a, b 변수이고 x, y만 수정한 것이 아니라는 것을 설명한다.
먼저 Exchg3 함수의 정의처인 Exchg3 (int & x, int & y) 를 보겠습니다.인자 x, y는 int의 변수로 호출할 때 우리는 값처럼 전달할 수 있다(예를 들어 Exchg1(a, b).마찬가지로 함수를 호출합니다(예: Exchg3(a, b).그러나 x, y 앞에는 모두 주소 찾기 기호인 '&' 가 있다.이것으로 Exchg3을 호출할 때 함수는 a, b를 각각 x, y로 대체할 것이다. 우리는 x, y가 각각 a, b 변수를 인용했다고 말한다.이렇게 함수에서 조작하는 것은 사실 a, b 자체이다. 즉, 함수에서 a, b의 값을 직접 수정할 수 있다는 것이다.
마지막으로 값 전달과 참조 전달을 비교합니다.
1. 함수 정의 형식은 다르다. 값 전달은 정의에서 Exchg1(int x, int y)이다.인용 전달은 Exchg3 (int & x, int & y) 이다.
2. 호출할 때 같은 형식이 있다. 값 전달: Exchg1(a, b).참조 전송: Exchg3(a, b),
3. 기능은 다르다. 값이 전달되는 함수에서 조작하는 것은 a, b 변수 자체가 아니라 a, b 값을 x, y에 부여하는 것이다.함수에서 조작하는 것은 x, y 변수일 뿐 a, b가 아니다. a, b를 표시하는 값은 Exchg1 함수에 의해 수정되지 않는다.인용 전달 Exchg3(a, b) 함수에서 a, b로 x, y를 각각 대체했다.함수에서 조작하는 것은 a, b 변수의 자체이기 때문에 a, b의 값은 함수에서 수정할 수 있다.
관련 지식 참조:
다음 프로그램에서 n은 m의 인용(reference)이고 m는 인용물(referent)이다.
int m;
int &n = m;
n은 m의 별명(별명)에 해당하고 n에 대한 모든 조작은 m에 대한 조작이다.그래서 n은 m의 복사도 아니고 m를 가리키는 지침도 아니다. 사실 n은 m 그 자신이다.
인용의 규칙: (1) 인용이 생성되는 동시에 초기화되어야 합니다. (바늘은 언제든지 초기화될 수 있습니다.)(2) NULL 참조가 있을 수 없으며 참조는 올바른 스토리지 장치와 연관되어야 합니다(포인터는 NULL일 수 있음).(3) 인용이 초기화되면 인용의 관계를 바꿀 수 없다(지침은 가리키는 대상을 수시로 바꿀 수 있다). 여기서 다른 대상을 더 이상 귀속할 수 없고const만 아니면 값을 바꿀 수 있다. 즉, 인용을 통해 귀속 대상의 값을 바꿀 수 있다. 왜냐하면 이것은 사실 같기 때문이다.다음 예시 프로그램에서 k는 i의 인용으로 초기화되었습니다.문장 k=j는 k를 j의 인용으로 수정할 수 없고 k의 값을 6으로 바꿀 뿐이다.k는 i의 인용이기 때문에 i의 값도 6이 되었다.
int i = 5;
int j = 6;
int &k = i;
k = j; // k i 6;
인용의 주요 기능은 함수를 전달하는 매개 변수와 되돌아오는 값이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Go 언어】interface 의 포인터로부터 메소드 호출할 수 없는 것은 왜?간결하게 말하면 「interface 를 가리키는 포인터는 interface 를 실장한 구조체의 포인터의 포인터가 되기 때문」입니다. 이것만으로는 잘 모르기 때문에 자세히 살펴 보겠습니다. interface의 Mamm...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.