만담 C 지침 제11강 - 매개 변수의 인용 전달

3630 단어 포인터인용하다
문제 3의 코드를 보십시오:
#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;

인용의 주요 기능은 함수를 전달하는 매개 변수와 되돌아오는 값이다.

좋은 웹페이지 즐겨찾기