반응형

안녕하세요.

오늘은 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으로 변경하면 값이 변경되는 것을 확인할 수 있습니다.

반응형

+ Recent posts