Ch14. 함수&포인터(22/01/27)

이수복·2022년 1월 27일

Call-by-value, Call-by-reference

전자는 값을 전달하는 형태의 함수호출, 후자는 주소 값을 전달하는 형태의 함수호출

매개변수는 함수의 정의에서, 인자는 함수의 호출 간에 활용이 된다.
그리고 함수를 호출할 때, 인자가 아니라 인자에 저장된 값이 매개변수에 복사가 된다.

  1. 배열은?
    함수의 정의 간에 매개변수로 배열은 정의할 수 없고, 인자로 활용되어 함수 호출은 가능하다.
    -> 매개변수는 포인터 변수를 활용한다.

    void AA(int *param)
    {
    	...
    }
    int main(void)
    {
    	int arr[3]={1,2,3};
    	int *ptr = arr;
    	AA(arr);
    }
  2. 배열은?
    함수를 정의할 때 받는 매개변수는 다음의 두 가지 경우처럼 활용 가능
    후자의 경우가 배열이 인자로 전달된다는 느낌을 강하게 주기 때문에 잘 활용됨

    void AA(int *param)
    void AA(int param[]}
  3. scanf함수의 &연산자

    int num;
    scanf("%d", &num);		
    -> 변수 num의 주소값을 scanf 함수에 전달, 이후 변수 num에 접근하여 입력한 값을 채움

포인터 대상의 const 선언

변수를 상수화하는 const 선언으로 포인터 변수가 참조하는 대상의 변경을 허용치 않음
const 선언의 위치에 따라 의미가 달라짐

  1. const 자료형 * 포인터 변수
    포인터 변수를 이용해 주소값이 가리키는 변수에 저장된 값을 변경하는 것을 금함

    int num = 20;
    const int *ptr = #
    *ptr = 30;		-> 컴파일 에러
    num = 40;		-> 컴파일 성공
  2. 자료형 * const 포인터 변수
    포인터변수의 주소값 변경을 금함

    int num = 20;
    int num2 = 30;
    int const *ptr = #
    ptr = @num2;		-> 컴파일 에러
    *ptr = 40;		-> 컴파일 성공
  3. const 자료형 * const 포인터 변수
    1,2의 의미를 모두 갖음

profile
개발 입문자

0개의 댓글