IT/정보처리기사

[정처기 4과목] 값에 의한 전달 vs 참조에 의한 전달(C언어)

aram 2023. 2. 13. 10:41

 

* 2023 이기적 환상의콤비 정보처리기사 교재 1-328p, 1-333p & [정보처리기사_환콤] 4-2-3.자료 구조와 포인터 강의 참고

 

값에 의한 전달(Call By Value)

인수를 통해 전달 되는 값 == 복사된 값

void half(int h){
    h = h/2;
}

int main()
{
    int a=20;
    int b=a;
    a++;
    printf("%d %d\n", a, b);   //21 20
    half(b);
    printf("%d %d\n", a, b);   //21 20
}

half에 전달되는 변수bmain에 사용한 변수b서로 다른 값을 가짐
>> 파이썬에서의 지역변수로 생각하면 이해하기 쉬움
>> 즉, half함수의 지역변수b와 main함수의 지역변수b는 각각의 함수 안에서만 사용 가능
>> 파이썬에서는 해당 함수의 반환값을 변수로 받아주면 되지만 C에선 불가능

 

main의 변수b값을 변경하려면? 

변수b 데이터의 주소값으로 직접 데이터에 접근해야함!

 

참조에 의한 전달(Call By Reference)

- 포인터 : 주소값으로 특정 데이터에 접근할 수 있는 기능
- & : 해당 식별자의 주소값 도출
- * : &<변수명>의 위치로 접근

void half(int *h){
    *h = *h/2;	   //2. h가 받은 데이터 주소값인 변수b값이 변경됨
}

int main()
{
    int a=20;
    int b=a;
    a++;
    printf("%d %d\n", a, b);   //21 20
    half(&b);	//1. 변수b의 주소값이 half에 전달됨
    printf("%d %d\n", a, b);   //21 10  -- 3
}

참조(위치)값을 전달 => 데이터 원본 가공 가능

* 선형 자료구조의 리스트에서 링크 개념을 생각하면 이해하기 편함

 

728x90