본문 바로가기
C/코딩도장

[코딩도장] Unit 62. 함수에서 매개변수 사용하기

by 단월໒꒱ 2021. 8. 22.

1. 함수에서 매개변수 사용하기

함수에서 매개변수를 사용하면 넘겨주는 값에 따라 함수의 반환값이 바뀌게 할  수 있다.

매개변수를 사용하려면 함수를 정의할 때 괄호 안에 자료형과 변수 이름을 지정해주면 된다.

 

반환값자료형 함수이름(자료형 매개변수) {

           코드

}

 

위의 내용을 이용한 코드를 살펴보자.

 

 

이처럼 함수를 정의할 때 괄호 안에 int num1처럼 자료형과 매개변수를 지정해주면, 함수를 호출할 때 넣은 값이 매개변수에 저장된다.

 

함수에서 매개변수가 어떻게 전해지는지 그림으로 나타내면 아래와 같다.

 

 

2. 함수에서 매개변수 여러 개 사용하기

함수에서 매개변수를 여러 개 사용하려면 각 매개변수를 콤마(,)로 구분해줘야 한다.

 

반환값자료형 함수이름(자료형 매개변수1, 자료형 매개변수2) {

           코드

}

 

 

 

위의 코드도 마찬가지로 함수를 정의할 때 괄호 안에 자료형과 매개변수를 지정해주면, 함수를 호출했을 때 넣은 값이 순서대로 각각의 매개변수에 저장된다.

 

함수에서 매개변수가 어떻게 전해지는 지 그림으로 나타내면 아래와 같다.

 

 

여기서 주의할 점은 함수에 정의된 매개변수 개수만큼 값을 넣어야한다는 것이다.

함수에 정의된 매개변수 개수보다 적거나 많게 넣으면 함수가 제대로 작동되지 않는다.

 

3. 매개변수, 파라미터, 인자, 인수, 아규먼트 용어 차이

매개변수, 파라미터, 형식 매개변수, 인자 : 함수 바깥에서 전달된 값이 저장되는 변수를 뜻한다.

 

인수, 전달인자, 아규먼트, 실행 전달인자 : 함수를 호출할 때 전달하는 값이나 변수를 뜻한다.

 

정리하자면, 같은 변수나 값을 칭한다는 점에선 같지만 함수를 기준으로 봤을 때 용어가 다른 것 뿐이다.

 

4. 디버거에서 매개변수와 반환값 확인하기

디버거를 이용하면 매개변수 값과 함수의 반환값이 무엇인지 표시되기 때문에 유용하게 사용할 수 있다.

 

저번에는 Xcode 기준으로 디버깅 버튼을 공부해보았는데, 이번에는 Visual Studio 디버거 단축키를 정리해보았다.

- 중단점 삽입/삭제: F9

- 디버깅 시작 및 계속: F5

- 디버깅 중지: Shift+F5

- 프로시저 단위 실행: F10

- 한 단계씩 코드 실행: F11

- 프로시저 나가기: Shift+F11

 

 

# 퀴즈

1. 실수형 매개변수를 가진 함수를 선언하려고 합니다. 올바른 코드를 고르세요.

  답  ->  c. void helloNumber(float a);

 

2. 다음 함수를 호출하는 방법으로 올바른 것을 고르세요.

  답  ->  c. helloNumber(30);

 

3. 다음 중 함수에서 정수형 매개변수 두 개를 가진 함수를 선언하려고 합니다. 올바른 코드를 고르세요.

  답  ->  e. int helloNumber(int a, int b);

 

4. 다음 함수를 호출하는 방법으로 올바른 것을 고르세요.

  답  ->  d. add(1275, 693);

 

 

# 연습문제 1 : 문자 매개변수 사용하기

[문제]

 

[코드 및 결과]

 

 

[설명]

주어진 코드를 보면 이미 printType이라는 함수가 정의되어 있으므로 실행 결과를 출력하기 위해서 정의된 함수를 호출해야 한다.

printType의 매개변수는 char형이기 때문에 printType을 호출할 때 괄호 안에 'X'를 넣어주면 된다.

 

 

# 연습문제 2 : 뺄셈 함수 만들기

[문제]

 

[코드 및 결과]

 

 

[설명]

주어진 코드를 보면 함수를 호출하고 있는데 함수가 정의되어 있지 않은 상태이다.

따라서 함수를 정의해줘야 하는데 실행 결과를 보면 실수형을 반환하고 있으므로 반환값 자료형은 float으로 설정해준다.

그리고 매개변수의 자료형 또한 실수형이므로 매개변수의 자료형도 float으로 설정해 괄호 안에 넣어준다.

마지막으로 두 실수를 빼야하니까 return a - b;로 뺄셈을 한 결과값을 반환하도록 한다.

 

 

# 심사문제 1 : 게임 캐릭터 능력치 설정 함수 만들기

[문제]

 

[코드 및 결과]

 

 

[설명]

주어진 코드를 보면 main 함수 안에서 함수를 호출하고 있음을 알 수 있다.

이 함수를 무사히 호출하기 위해서 함수가 정의되어야 하기 때문에 빈칸에는 함수를 정의하는 내용이 들어가야 한다.

반환값이 없고 실수를 매개변수로 받기 때문에 void setAttackSpeed(float a)로 해주고 printf함수 안에 출력되어야 할 내용을 적어준다.

 

 

# 심사문제 2 : 덧셈 함수 만들기

[문제]

 

[코드 및 결과]

 

 

[설명]

위의 심사문제 1과 마찬가지로 주어진 코드를 보면 함수 호출 부분은 있는데 정의 부분이 없으므로 함수를 정의해줘야 한다.

입력된 수의 자료형이 long long형이므로 함수의 반환값 자료형과 매개변수 자료형도 long long형으로 지정해준다.

문제에서 두 정수의 합이 출력되어야 한다고 했으므로 return을 이용해서 a + b의 값을 반환해준다.

 

 

# 심사문제 3 : 3차원 정보 만들기

[문제]

 

[코드 및 결과]

 

 

[설명]

30번째 줄에서 x, y, z에 접근할 때 화살표 연산자(->)를 썼으므로 pos1이 구조체 포인터라는 것을 알 수 있다.

그리고 x, y, z가 실수형으로 되어있으므로 struct Point3D *allocPoint3D(float x, float y, float z) 라고 써준 뒤 괄호를 열고 구조체 포인터 Point3D *pos1에 메모리를 할당해준다.

화살표 연산자로 구조체 멤버 x, y, z에 접근하여 매개변수 x, y, z의 값을 저장해주고 return을 이용해서 pos1을 반환해준다.

 

 

 

댓글