함수 호출시 전달되는 인자의 값은 매개변수에 복사가된다.
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 |