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에 전달되는 변수b 와 main에 사용한 변수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