함수 호출시 전달되는 인자의 값은 매개변수에 복사가된다.

int SimpleFunc(int num) { ... }

int main(void)

{

int age =17;

SimpleFunc(age); // age 에 저장된 값이 매개변수 num 에 복사된다.

}


따라서 SimpleFunc 함수에서 num의 값을 변경했다고 하더라도 age 값의 변화는 없다.


배열을 함수의 인자로 전달하는 방식


매개변수로 배열을 선언할 수 없기 때문에 , 함수내에서 배열에 접근하기위해선 배열의 주소값을 전달해야한다.


void ShowArrayElem1 ( int * param , int len) { ...} // 함수 내에선 배열의 길이를 계산할 수 없기때문에 , 배열의 길이정보도 함께 인자로 전달해야한다.

void ShowArrayElem2 { int[] param , int len) {....}

둘은 매개변수의 선언에서는 같은 변수의 선언이다.


Call-by-value , Call-by-reference


을 전달하는 형태의 함수 호출 : call-by -value // 값을 복사하기때문에 매개변수에 전달된 값을 변경할 수 없다.

주소값을 전달하는 형태의 함수호출 : call-by-reference // 주소값을 전달하기때문에 전달된 값을 변경할 수 있다.


포인터 대상의 const 선언


const int * ptr = # // 포인터 변수 ptr 을 이용해서 ptr 이 가리키는 변수에 저장된 값을 변경하는 것을 허용하지 않는다

int * const ptr = # // 포인터 변수 ptr 은 상수이며 , 따라서 ptr은 num 을 제외한 다른 주소값을 가리킬 수없다 ( 주소값을 변경할 수 없다 )

const 선언을 많이 할수록 코드의 안정성은 높아진다. 따라서 바꾸지 않을 변수는 const 선언을 해주는것이 좋다.



'C언어 > 열혈C' 카테고리의 다른 글

C : Chapter -14 이중 포인터  (0) 2018.03.23
C : Chapter -13 다차원 배열  (0) 2018.03.23
C : Chapter -11 포인터와 배열  (0) 2018.03.22
C : Chapter-10 포인터  (0) 2018.03.22
C : Chapter-9 배열  (0) 2018.03.22

+ Recent posts