Skip to content

함수의 parameter (매개변수), argument (인수) #11

Description

@gyurim

함수의 parameter (매개변수), argument (인수)

call by value : 값을 이용한 전달

  • 인수의 값(a)을 함수의 매개변수(num)로 값을 복사해 사용하는 방식
  • 계산은 인수의 값에 영향주지 못한다.
void add(int num) {
	num += 10;
}

int main() {
	int a = 10;
	add(a)
}

call by reference : 참조를 이용한 전달

  • 인수로 참조를 전달하여 값의 복사를 통한 전달이 아닌 원본 데이터를 직접 전달하는 방법 1
void add(int &num) {
	num += 10;
}

int main() {
	int a = 10;
	add(a)
}

call by reference (const 참조)

  • 원본에 직접 접근하지만, 값을 바꿀 수는 없음
void add(const int &num) {
	num += 10; // 에러가 뜬다. 
}

int main() {
	int a = 10;
	add(a)
}

call by address : 주소를 이용한 전달

  • 원본 데이터에 직접 접근할 수 있는 방법 2
  • 함수 내부에서 포인터의 역참조(*num)를 통해 원본 데이터에 접근할 수 있음
  • 배열을 사용할 때 편리함
  • (1) 포인터를 역참조할 경우, 직접 접근보다 느리며 (2) null값을 역참조하게 되면 프로그램이 강제 종료됨
void add(const int* num) {
	*num = 12;
}

int main() {
	int a = 10;
	add(&a)
}

// 배열 넘기기 
void print(int* _arr, int length) {
	for (int i = 0; i < length; i++) {
		cout << _arr[i] << " ";
	}
}

int main() {
	int arr[] = {1, 2, 3, 4};
	int length = 4;
	print(arr, length); // 배열의 이름을 인수로 넘겨줄 경우, 주소값이 들어가기 때문에 배열의 모든 원소에 접근 가능 
}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions