문제:두 변수의 값을 교환하는 프로시저를 작성합니다.
이 작업의 특징은 호출 프로그램에 알려지려면 프로시저에서 변경한 사항이 필요하다는 것입니다.
다음과 같은 절차를 작성해 봅시다.
var x, y: 정수;
<예비>
절차 Swap(a, b: 정수); // 프로시저 매개변수에 대한 설명과 함께
var c: 정수;
시작 // 인수 값 (x 및 y)을 복사합니다.
// 변수 a와 b는 x와 y에 관련되지 않은 독립 변수입니다.
씨 := 아;
a := b;
b := c;
끝;
시작하다
엑스 := 1;
y := 2;
스왑(x,y); //변수 x 및 y(인수)의 값이 매개변수 a 및 b에 복사됩니다.
writeln('x = ', x, ', y = ', y); // x=1, y=2
끝.
이 프로그램을 실행해보면 변수 x와 y의 값이 변하지 않은 것을 확인할 수 있다. 매개변수가 인수의 값을 변경하려면 참조로 데이터 전달을 사용해야 합니다. 이렇게 하려면 데이터 유형의 이름 뒤에 서브루틴의 헤더에 var 라는 단어를 넣어야 합니다.
<예비>
프로시저 스왑(var a, b: 정수); // 이제 변수 a와 b는 메모리에서 변수 x와 y의 주소를 얻습니다.
var c: 정수;
시작하다
씨 := 아;
a := b;
b := c;
끝;
사용법: 인수를 참조로 전달하면 프로시저를 호출할 때 변수 이름(숫자 및 산술 표현식이 아님)만 이 위치에 있을 수 있습니다!< br />
다음과 같은 프로시저를 호출하지 마십시오.
<예비>
스왑(x, 4);
스왑(5+x, y);