C++
C ++ 함수 "값으로 호출"대 "참조로 호출"
수색…
소개
이 절의 범위는 호출 할 때 함수의 매개 변수가 어떻게되는지에 대한 이론 및 구현의 차이점을 설명하는 것입니다.
상세하게는 매개 변수는 함수 호출 전과 함수 내부에서 변수로 볼 수 있습니다. 여기서 함수에 대한 시각적 동작 및 액세스 가능성은 변수를 전달하는 데 사용되는 메서드와 다릅니다.
또한 함수 호출 이후의 변수 및 해당 값의 재사용 가능성에 대해서도이 항목에서 설명합니다.
가치로 부름
함수를 호출하면 프로그램 스택에 새 요소가 만들어집니다. 여기에는 함수에 대한 정보와 매개 변수 및 반환 값에 대한 공간 (메모리 위치)이 포함됩니다.
함수에 매개 변수를 넘겨 주면 사용 된 변수 (또는 리터럴)의 값이 함수 매개 변수의 메모리 위치에 복사됩니다. 이것은 현재 동일한 값을 갖는 두 개의 메모리 위치가 있음을 의미합니다. 함수 내부에서 우리는 매개 변수 메모리 위치에서만 작업합니다.
함수를 떠난 후에는 프로그램 스택의 메모리가 팝핑 (제거)되어 내부에서 사용 된 매개 변수의 메모리 위치를 포함하여 함수 호출의 모든 데이터가 지워집니다. 따라서 함수 내부에서 변경된 값은 외부 변수 값에 영향을 미치지 않습니다.
int func(int f, int b) {
//new variables are created and values from the outside copied
//f has a value of 0
//inner_b has a value of 1
f = 1;
//f has a value of 1
b = 2;
//inner_b has a value of 2
return f+b;
}
int main(void) {
int a = 0;
int b = 1; //outer_b
int c;
c = func(a,b);
//the return value is copied to c
//a has a value of 0
//outer_b has a value of 1 <--- outer_b and inner_b are different variables
//c has a value of 3
}
이 코드에서는 main 함수 안에 변수를 만듭니다. 이것들은 할당 된 값을 얻습니다. 함수를 호출 할 때 f
와 inner_b
두 개의 새로운 변수가 생성됩니다. 여기서 b
는 메모리 위치를 공유하지 않는 외부 변수와 이름을 공유합니다. a<->f
와 b<->b
은 동일합니다.
다음 그래픽은 스택에서 일어나는 일과 왜 varibale에서 변경이 없는지를 상징합니다. b
. 그래픽은 완전히 정확하지는 않지만 예제를 강조합니다.
우리가 변수들을 넘겨 내지 않기 때문에 "가치에 의한 호출"이라고 불리지 만이 변수들의 값들만을 전달합니다.