핵심 정리

함수

함수는 자주 사용되는 코드를 한 곳에 모아놓은 것을 뜻합니다.

함수를 호출할 때 함수 안에 전달하는 값을 인수라고 하며 함수가 호출 된 뒤 함수 안에서 나오는 값을 반환값이라고 합니다. 반환값이 없는 함수는 반환값 자료형에 void를 지정합니다.

// 반환값과 매개변수가 없는 함수 정의
void 함수이름()
{
    코드;
}

함수();    // 함수 호출

반환값은 함수 안에서 return으로 반환합니다. 이때 반환값 자료형과 반환하는 값(변수)은 자료형이 같아야 합니다.

// 반환값이 있는 함수 정의
반환값자료형 함수이름()    // 반환값 자료형과 반환하는 값은 자료형이 같아야 함
{
    return 반환값;
}

변수 = 함수();      // 함수를 호출한 뒤 반환값을 변수에 저장

함수가 호출될 때 전달받은 값은 매개변수를 통해서 사용할 수 있습니다.

// 매개변수가 있는 함수 정의
반환값자료형 함수이름(자료형 매개변수1, 자료형 매개변수2)
{
}

함수(1, 2);    // 함수를 호출하면서 인수 전달

매개변수와 인수

함수 바깥에서 전달된 값이 저장되는 변수를 매개변수라 부릅니다.

int add(int a, int b)     // a와 b가 매개변수
{
    return a + b;
}

함수를 호출할 때 전달하는 값이나 변수를 인수라 부릅니다.

add(10 , 20);    // 10과 20이 인수

함수에서 포인터 매개변수와 반환값 사용하기

함수에서는 일반적인 값뿐만 아니라 포인터(메모리 주소)도 반환할 수 있습니다. 포인터를 반환하는 함수를 만들려면 반환값 자료형과 함수 사이에 * (애스터리스크)를 붙이면 됩니다.

// 포인터를 반환하는 함수 정의
반환값자료형 *함수이름()    // 반환값 자료형과 반환하는 값은 자료형이 같아야 함
{
    return 반환값;
}

단, 함수 안에서 & 연산자로 변수의 메모리 주소를 반환하면 안 됩니다. 매개변수와 함수 안에서 선언한 변수는 함수가 끝날 때 모두 사라집니다. 그러므로 함수 안에서만 쓸 수 있는 변수의 주소를 반환하면 안 됩니다.

함수에서 구조체 반환값 사용하기

함수에서 구조체를 반환할 때는 반환값 자료형에 struct 키워드와 구조체 이름을 지정한 뒤 return으로 구조체 변수를 반환합니다.

struct 구조체이름 함수이름()
{
    return 구조체변수;
}

구조체 포인터를 반환할 때는 반환값 자료형에서 구조체 이름과 함수 사이에 *를 붙인 뒤 return으로 구조체 포인터를 반환합니다.

struct 구조체이름 *함수이름()
{
    return 구조체포인터;
}

함수에서 구조체 반환값의 복사

함수에서 구조체 변수를 반환한 뒤 다른 변수에 저장하면 구조체의 내용을 모두 복사하게 됩니다. 구조체의 크기가 커지면 그만큼 공간이 더 필요하게 되므로 비효율적입니다.

struct 구조체이름 함수이름()
{
    return 구조체변수;
}

구조체변수 = 함수();     // 반환된 구조체의 내용이 모두 구조체 변수에 복사됨

malloc 함수로 구조체 포인터에 동적 메모리를 할당한 뒤 반환하면 구조체 복사가 일어나지 않아서 효율적입니다.

struct 구조체이름 *함수이름()
{
    // malloc 함수로 구조체 포인터에 메모리를 할당
    return 구조체포인터;    // 구조체 포인터 반환
}

포인터 = 함수();    // 포인터(메모리 주소)만 반환됨

free(포인터);       // 동적 메모리 해제

Visual Studio 디버거 사용하기

  • 중단점 삽입/삭제: 소스 코드 편집 창에서 마우스 오른쪽 버튼 클릭하고 중단점(B) > 중단점 삽입(R) 또는 F9
  • 중단점 삽입/삭제: 소스 코드 편집 창에서 마우스 오른쪽 버튼 클릭하고 중단점(B) > 중단점 삽입(R) 또는 F9
  • 디버깅 중지: 디버그(D) > 디버깅 중지(E) 또는 Shift+F5
  • 프로시저 단위 실행: 디버그(D) > 프로시저 단위 실행(O) 또는 F10
  • 한 단계씩 코드 실행: 디버그(D) > 한 단계씩 코드 실행(I) 또는 F11
  • 프로시저 나가기: 디버그(D) > 프로시저 나가기(T) 또는 Shift+F11