목 차
안녕하세요.
오늘은 C언어의 함수에 대해 알아보도록 하겠습니다.
함수
함수(Function)를 뜻을 영어사전에서 찾아보면, 기능이라는 뜻이 됩니다.
C언어에서도 기능을 따로 분리해서 코딩을 할 수 있습니다.
우리가 자주 사용하는 printf가 대표적인 예가 될 수 있습니다.
출력하는 기능을 이용하고 싶은데 printf에 들어있는 코드들을 모두 main함수에 넣을 수는 없기 때문입니다.
형식
반환자료형 함수명(매개변수1, 매개변수2) { 구문; return 반환값; } |
반환할 자료형(int, float등)을 정하고 매개변수에 값을 넣어서 함수에 전달해줍니다.
함수가 종료되기 전에 return으로 값을 반환합니다.
반환자료형이 void라면 return 값이 필요없습니다.
예제
1
2
3
4
5
6
7
8
9
10
11
12
|
#include <stdio.h>
void printA(int nNum)
{
printf("printA : %d\n", nNum);
}
void main()
{
int nNum = 5;
printA(nNum);
}
|
cs |
printA라는 함수를 만들었습니다.
매개변수에 nNum값을 넘겨주면 "printA : 5"가 출력이됩니다.
함수는 main함수보다 윗줄에 코딩하거나 아니면 다음과 같이 선언을 하고 main함수 아래에 정의할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#include <stdio.h>
void printA( int nNum );
void main()
{
int nNum = 5;
printA(nNum);
}
void printA( int nNum )
{
printf("printA : %d\n", nNum);
}
|
cs |
매개변수 전달
- 매개변수로 값 전달
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#include <stdio.h>
int Plus(int nNum1, int nNum2)
{
return nNum1 + nNum2;
}
void main()
{
int nNum1 = 5;
int nNum2 = 8;
printf("Plus(%d, %d) : %d", nNum1, nNum2, Plus(nNum1, nNum2));
}
|
cs |
Plus함수에 5,8값을 매개변수로 전달해서 덧셈한 후 리턴합니다.
- 매개변수로 주소 전달
매개변수로 값을 전달하고 함수안에서 값을 변경해봅시다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#include <stdio.h>
int Plus(int nNum1, int nNum2)
{
nNum1 = 10;
return nNum1 + nNum2;
}
void main()
{
int nNum1 = 5;
int nNum2 = 8;
printf("Plus(%d, %d) : %d", nNum1, nNum2, Plus(nNum1, nNum2));
}
|
cs |
Plus함수내에서 매개변수를 변경을 하면 덧셈연산 후 리턴값은 변경 되지만, nNum1값은 변경한 10이 아닌 그대로 5입니다.
함수내에서 값을 변경하면 매개변수 값도 변경되게 하려면 어떻게 하면 될까요??
주소값을 매개변수로 전달하면 됩니다.
주소를 나타내는 "&"을 붙여서 매개변수를 전달합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#include <stdio.h>
int Plus(int* nNum1, int* nNum2)
{
*nNum1 = 10;
return *nNum1 + *nNum2;
}
void main()
{
int nNum1 = 5;
int nNum2 = 8;
printf("Plus(%d, %d) : %d", nNum1, nNum2, Plus(&nNum1, &nNum2));
}
|
cs |
포인터 변수로 주소값으로 매개변수 값을 전달하면 nNum1 값을 5에서 10으로 변경하면 값이 변경되는 것을 확인할 수 있습니다.
'개발공부 > C언어&C++' 카테고리의 다른 글
[C언어&C++] strcpy, strncpy 함수(문자열 복사 함수) (0) | 2020.03.02 |
---|---|
[C언어 강좌] 제 11강 구조체(struct) (0) | 2020.02.29 |
[C언어 강좌] 제 9강 포인터( 포인터변수 ) (0) | 2020.02.27 |
[C언어 강좌] 제 8강 반복문( for, while, do-while ) (0) | 2020.02.26 |
[C언어 강좌] 제 7강 조건문 (if, else if, else, switch, case, break) (0) | 2020.02.25 |