*모르는 것을 채워넣는 위주로 작성
1.용어
정의: 함수가 실행되었을 때 어떤 명령을 실행할 것인지 중괄호 안에 적는다.
호출: 이미 정의된 함수를 실행하는 것
매개변수(parameter)
인수(argument)
스코프(scope): 변수가 유효한 범위를 나타냄. 블록 스코프와 함수 스코프 존재
스왑(swap): 두 변수에 들어있는 값을 뒤바꾸는 것
-------------------------------------------------------------------------------------------------------
2.Return
Return은 함수에서 값을 반환하는 역할도 하지만 함수를 종료시키는 역할도 한다.
void함수에서도 마찬가지로 return문이 사용가능한데 함수를 종료시키는 역할만 한다.
Return; 라고 쓰면 된다.
-------------------------------------------------------------------------------------------------------
3.두 변수의 스왑
자주 쓰이므로 방식을 암기하고 있으면 좋다
int x,y;
int tmp=x;
x=y;
y=tmp;
-------------------------------------------------------------------------------------------------------
4.Call_by_value(값에 의한 호출)
두 값을 스왑해주는 함수를 만들어서 실행해본다고 하자.
void swap(int x, int y){//x,y를 매개변수로 받음
int tmp=x;
x=y;
y=tmp;
}
int main(){
int a=3;
int b=5;
swap(a,b);
}
위의 코드의 a에 있는 값과 b의 있는 값은 3과 5이다.
전혀 스왑이 이루어지지 않았다.
이유를 알아보기 위해 swap의 작동순서를 보좋자.
우선 a와 b를 매개변수로 받는다. 이때 x와 y는 a와 b를 의미하는 것이 아니라
a와 b의 값을 복사하여 담는 것이다.
따라서 x y의 값을 바꾸어도 a b에서는 스왑이 이루어 지지 않은 것이다.
이를 값에 의한 호출이다.
내가 많이 실수 하는 부분.......
위의 함수를 수정하기 위해서는 무엇이 필요할까??
x y가 a,b를 의미할 수 있다면 스왑이 가능할 것이다.
바로 포인터를 이용하면 된다.(아래에서 설명)
-------------------------------------------------------------------------------------------------------
5.Call-by_address(주소에 의한 호출)
void swap(int *x, int *y){//x,y를 매개변수로 받음
int tmp=*x;
*x=*y;
*y=tmp;
}
int main(){
int a=3;
int b=5;
swap(&a,&b);//swap(a,b)라고 하면 컴파일이 안되더라...
}
int *x, int *y// x,y를 포인터변수로 지정한다. 즉 주소를 받겠다는 말이다.
int tmp=*x// tmp에는 포인터 변수 x가 담은 주소에 있는 내용물을 담았다(*를 포인터변수 선언 이외에 쓰면 역참조의 의미)
*x=*y//포인터 변수 x가 가르키는 곳에 y가 가르키는 곳의 내용물을 넣겠다는 것
*y=tmp//tmp에는 x가 가르키는 곳의 내용물이 있으므로 이를 y가 가르키는 곳에 넣어서 스왑을 완성시킴
**내가 만약에 특정변수에 대해서 값을 바꾸고 싶다면 방법은 두 가지가 있다.
(1).Call-by-value방식의 함수를 통해 모종의 연산을 한 값을 리턴 받아 그 변수에 넣는것
ex)
int add(int x,int y){
int i=x+y;
return i;
}
int main(){
int num1=0;
int num2=4;
int sum=0;//바꾸고 싶은 특정변수
sum=add(num1,num2);
}
(2).Call-by-address 방식의 함수를 이용해서 직접 특정변수를 건들이는 것
ex)
void add(int *sum,int *x,int *y){
*sum=*x+*y;
}
int main(){
int num1=0;
int num2=4;
int sum=0;//바꾸고 싶은 특정변수
add(&sum,&num1,&num2);
}
-------------------------------------------------------------------------------------------------------
6. Call_by_referrence
이것은 c++에서 쓰이는 레퍼런스 변수를 말한다.
레퍼런스 변수란 변수의 별명같은 것이다.
int a;
int &ra=a;
이렇게 사용하는 데
ra변수에 a의 값을 담는 것이 아니라.
그냥 a와 같은 것이라고 보는 것이 타당하다. 주소도 같고 값도 같다.
korea를 south korea, Republic of Korea 라고 부르는 것과 동일하다.
ex)
void swap(int &x, int &y){
int tmp=x;
x=y;
y=tmp;
}
int main(){
int a=3;
int b=5;
swap(a,b);
}
'4_전공 과목' 카테고리의 다른 글
[C/C++_두들 낙서]_함수_배열을 매개변수로 (0) | 2021.08.23 |
---|---|
[C/C++_두들 낙서]함수_재귀 함수 (0) | 2021.08.23 |