함수
- 함수를 호출하면 중괄호 내의 코드들을 실행시키고, 호출 전으로 돌아간다
- 자료형과 함께 함수명을 붙이고 중괄호안에 코드들을 적는다
- printf와 scanf 등도 하나의 함수다
return
- 함수에서 호출시에 자료형에 맞는 지정된 변수나 연산값을 반환한다 함수 자료형이 int라면 int값만 반환할 수 있다
- 값을 반환하면 실행중이었던 함수는 종료된다 반복문이라도 함수 내에서 발생했다면 종료된다
- return을 쓰지 않아도 함수는 종료될 수 있다 다만, 반환되는 값은 없다
주의 return 다음의 코드들은 실행되지 않는다
주의 함수의 자료형이 void라면 return할 수 없다
전역변수
- 함수 밖에서 선언된 변수로 모든 함수에서 접근이 가능하다
지역변수
- 하나의 함수안에서 선언된 변수로 다른 함수에서 임의로 접근할 수 없다
매개변수
- 함수에서 사용하는 변수로, 함수를 호출할 때 값을 지정해줄 수 있다
- 배열을 매개변수로 넘기면 call-by-reference로 넘어간다 2차원도 마찬가지다
주의 함수에서 배개변수를 지정할 때 자료형을 명시해주어야 한다
ex) void buyItem(int cost, int cnt) {/* 중략*/}
buyItem(30, 5);
call-by-value
- 값을 인자로 전달하는 함수의 호출 방식
주의 call-by-value의 형태로 정의된 함수의 내부에서는 함수 외부에 선언된 변수에 접근이 불가능하다
ex) void swap(int x, int y) { a와 b의 값을 swap하는 코드
int tmp = x;
x = y;
y = tmp;
}
call-by-reference
- 주소값을 인자로 전달하는 함수의 호출 방식
주의 엄밀히는 포인터를 사용한 호출은 call-by-reference로 보기 어렵지만 변수의 입장에서는 변수 자체가 바뀐 것처럼 보이기 때문에, 겉으로는 call-by-refernce 처럼 보이는 것이다. 따라서 포인터를 넘겨주는 것은 주소에 의한 호출(call-by-address)이라고 부르는 것이 가장 정확한 표현이다 by 두들낙서의 정정글
ex) void swap(int *x, int *y) { a와 b의 값을 swap하는 코드
int tmp = *x;
*x = *y;
*y = tmp;
}
prototype
- 함수의 원형
- 프로토타입을 서두에 명시하면, 함수 정의의 순서가 달라져도 실행에 문제를 일으키지 않는다
주의 편의를 위한 장치일 뿐, 필수는 아니기 때문에 타인의 코드를 분석할 때 맹신해서는 안된다
ex) void walk(int); 매개변수의 이름을 미리 지정하지 않아도 된다
int main() {
walk(10); 만약 프로토타입이 없다면 walk함수가 호출되는 곳보다 아래에 있기 때문에 빌드 오류가 난다
}
void walk(int distance) {
printf("%dcm를 걸었습니다.\n"), distance);
}
재귀함수
- 자기 자신을 호출하는 함수
주의 탈출하는 방법을 만들지 않으면 시스템이 무한 반복한다
ex) int factorial(int n) {
if (n == 1) return 1; 1이 될 때까지 재귀 시켜준다
return n * factorial(n - 1);
}
'Study > C C++' 카테고리의 다른 글
[두들낙서] 상수 (0) | 2021.03.01 |
---|---|
[두들낙서] 구조체 (0) | 2021.03.01 |
[두들낙서] 포인터 (0) | 2021.03.01 |
[두들낙서] 배열 (0) | 2021.02.28 |
[두들낙서] 반복문 (0) | 2021.02.28 |