본문 바로가기

Study/C C++

[두들낙서] 함수

함수

 - 함수를 호출하면 중괄호 내의 코드들을 실행시키고, 호출 전으로 돌아간다

 - 자료형과 함께 함수명을 붙이고 중괄호안에 코드들을 적는다

 - 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