2021년 목표설정

이미지
기본적으로 작년에 달성하지 못한 것들을 하려고 생각중인데..코로나가 언제까지 이어질지, 한국이나 북해도는 갈 수 있을지..자격증은 응시 가능할지..여러가지가 불확실하다. 2021년은 무엇보다 정신적인 부분과 경제적인 부분에 중점을 두고 조금 더 치열하게 지내보고 싶다. 일본나이로도 30대 마지막 해, 이제 불혹에 접어드는 나이..복잡하지만 심플하게. 육체적목표 : 트라이에슬론 스탠다드 도전하기 정신적 : 자격증2개 도전 + 자체개발 서비스 론칭 가족적 : 가정의 평화를 유지하기 경제적 : 외식과 유흥비를 줄이고 부수입을 늘려서 결과적으로 저축하기 사회적 : 목표세미나를 포함해서 민단과 개인인맥의 활성화와 교류를 촉진하기

Call by value & Call by pointer & Call by reference

1. Call by Value 란 무엇인가??
함수의 인자값(매개변수,parameter) 그 자체를 넘겨준다.
이 경우에 함수는 변수의 값을 복사하여 보내게 된다
즉, 값을 변경시킨다 하더라도 호출한 측의 변수는 값이 변경되지 않는다.

[[예제소스 1 - call by value]]

#include <iostream.h> // 헤더파일 정의
void swap (int x, int y); // swap 함수 정의
int main() // 메인함수 시작
{
int num1 = 3, num2 = 7; // num1, num2 변수 선언
cout << "[[[call by value 예제!!!]]" << endl << endl; // 화면 출력
cout << "메인함수에서 swap 하기 전의 값은 num1 : " << num1 << " num2 : " << num2 << " 입니다." << endl;// swap 함수를 호출하기 전에 값을 찍는다.

swap(num1,num2); // swap 함수 호출(call by value)
cout << "메인함수에서 swap 한 후의 값은 num1 : " << num1 << " num2 : " << num2 << " 입니다." << endl;// swap 함수 호출 후의 값을 찍는다.

return 0; // 리턴값으로 함수 종료
}

void swap (int x, int y) // swap 함수 구현
{
int temp; // swap을 위한 임시변수 선언
cout << "swap 함수에서 swap 하기 전의 값은 x : " << x << " y : " << y << endl;
// swap 하기 전의 값을 찍는다.

temp = x; // x를 임시변수에 넣고
x = y; // y의 값을 x에 넣고
y = temp; // 임시변수의 값을 y에 넣는다.
cout << "swap 함수에서 swap 한 후의 값은 x : " << x << " y : " << y << endl;
// swap 의 결과값을 찍는다.
}

 2. Call by Pointer 란 무엇인가??
매개변수의 포인터(주소값)을 넘겨준다.
이 경우에 함수는 변수의 주소값을 얻을 수 있으며 ‘*’ 연산자를 사용하여 호출한 측의 변수값을 변경할 수 있으며 call by adress 라고도 한다.

[[예제소스 2 - call by pointer]]

#include <iostream.h> // 헤더함수 정의
void swap (int *x, int *y); // 함수 정의(포인터로 인자값을 받는다)
int main() // 메인함수 시작
{
int num1 = 3, num2 = 7; // 변수에 값 대입
cout << "[[[call by pointer 예제!!!]]" << endl << endl; // 화면 출력
cout << "메인함수에서 swap 하기 전의 값은 num1 : " << num1 << " num2 : " << num2 << " 입니다." << endl;// 화면에 값 출력
swap(&num1,&num2); // 포인터 변수의 주소값을 함수 매개변수로 전달
cout << "메인함수에서 swap 한 후의 값은 num1 : " << num1 << " num2 : " << num2 << " 입니다." << endl;// 함수호출 후의 값을 화면에 출력한다.
return 0; // 함수 리턴값 끝.
}

void swap (int *x, int *y) // 함수 정의
{
int temp; // 임시변수 선언

cout << "swap 함수에서 swap 하기 전의 값은 *x : " << *x << " *y : " << *y << endl;// swap 하기 전의 값을 화면에 출력
temp = *x; // 임시변수에 포인터 변수 x의 값을 넣고
*x = *y; // 포인터 변수 x에 포인터 변수 y를 넣고
*y = temp; // 임시변수의 값을 포인터 변수 y에 넣는다.

cout << "swap 함수에서 swap 한 후의 값은 *x : " << *x << " *y : " << *y << endl;// swap 한 수의 값을 화면에 출력
}
  
 3. Call by Reference 란 무엇인가??
이 경우에 함수는 호출한 측 변수의 레퍼런스(별칭)를 얻게 된다.
이때는 호출한 쪽의 변수로 초기화된 레퍼런스가 생성된다.
call by value와 call by pointer의 장점을 모두 가질 수 있다.

[[예제소스 3 - call by reference]]

#include <iostream.h> // 헤더함수 정의
void swap (int &x, int &y); // 함수 정의(인자값을 레퍼런스로 변환해서 받는다.)int main() // 메인함수 시작
{
int num1 = 3, num2 = 7; // 변수 선언
cout << "[[[call by reference 예제!!!]]" << endl << endl; // 화면 출력
cout << "메인함수에서 swap 하기 전의 값은 num1 : " << num1 << " num2 : " << num2 << " 입니다." << endl;// swap 함수 호출 전의 값을 출력하기
swap(num1,num2); // swap 함수 호출(그냥 넘긴다)
cout << "메인함수에서 swap 한 후의 값은 num1 : " << num1 << " num2 : " << num2 << " 입니다." << endl;// swap 함수 호출 후의 값을 출력하기
return 0; // 함수 리턴값
}

void swap (int &x, int &y) // 별도 선언하지 않아도 레퍼런스 값을 가진다.
{
int temp; // 임시 변수 선언
cout << "swap 함수에서 swap 하기 전의 값은 x : " << x << " y : " << y << endl;// swap 하기 전의 값을 출력한다.
temp = x; // 임시변수에 x 값을 넣고
x = y; // x변수에 y값을 넣고
y = temp; // y변수에 temp를 넣는다.

cout << "swap 함수에서 swap 한 후의 값은 x : " << x << " y : " << y << endl; // 화면 출력
}

댓글

이 블로그의 인기 게시물

성공적인 소셜커머스를 위한 10단계 전략

[C# & LINQ] 랜덤으로 데이터를 한 개 추출하는 방법

[메모] PostgreSQL에서 Insert 하는 경우 자동채번 PK가 중복에러 나는 경우