수색…


소개

이 절의 범위는 호출 할 때 함수의 매개 변수가 어떻게되는지에 대한 이론 및 구현의 차이점을 설명하는 것입니다.

상세하게는 매개 변수는 함수 호출 전과 함수 내부에서 변수로 볼 수 있습니다. 여기서 함수에 대한 시각적 동작 및 액세스 가능성은 변수를 전달하는 데 사용되는 메서드와 다릅니다.

또한 함수 호출 이후의 변수 및 해당 값의 재사용 가능성에 대해서도이 항목에서 설명합니다.

가치로 부름

함수를 호출하면 프로그램 스택에 새 요소가 만들어집니다. 여기에는 함수에 대한 정보와 매개 변수 및 반환 값에 대한 공간 (메모리 위치)이 포함됩니다.

함수에 매개 변수를 넘겨 주면 사용 된 변수 (또는 리터럴)의 값이 함수 매개 변수의 메모리 위치에 복사됩니다. 이것은 현재 동일한 값을 갖는 두 개의 메모리 위치가 있음을 의미합니다. 함수 내부에서 우리는 매개 변수 메모리 위치에서만 작업합니다.

함수를 떠난 후에는 프로그램 스택의 메모리가 팝핑 (제거)되어 내부에서 사용 된 매개 변수의 메모리 위치를 포함하여 함수 호출의 모든 데이터가 지워집니다. 따라서 함수 내부에서 변경된 값은 외부 변수 값에 영향을 미치지 않습니다.

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 함수 안에 변수를 만듭니다. 이것들은 할당 된 값을 얻습니다. 함수를 호출 할 때 finner_b 두 개의 새로운 변수가 생성됩니다. 여기서 b 는 메모리 위치를 공유하지 않는 외부 변수와 이름을 공유합니다. a<->fb<->b 은 동일합니다.

다음 그래픽은 스택에서 일어나는 일과 왜 varibale에서 변경이 없는지를 상징합니다. b . 그래픽은 완전히 정확하지는 않지만 예제를 강조합니다. 함수 호출 중 스택 시각화

우리가 변수들을 넘겨 내지 않기 때문에 "가치에 의한 호출"이라고 불리지 만이 변수들의 값들만을 전달합니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow