반응형
SMALL

학습목표

1. 값에 의한 자료전달 방법과 참조에 의한 자료전달 방법의 차이를 이해할 수 있다.

2. 지역 변수와 전역 변수를 이해할 수 있다.

 

주요용어

기억 클래스 : 변수를 기억공간의 특정 영역에 할당하는 방법

지역 변수 : 특정 범위 내에서만 사용되는 변수

전역 변수 : 프로그램 전체에 걸쳐 사용될 수 있는 변수

자동 변수 : 함수 실행 시 만들어 지고 실행이 끝나면 기억공간이 제거되는 유형

정적 변수 : 프로그램이 끝날 때까지 기억영역이 유지되는 유형

외부 변수 : 함수외부에 선언되어 프로그램이 끝날 때까지 기억영역이 유지되는 유형

레지스터 변수 : CPU 내의 레지스터에 자료를 저장하고자 할 때 사용되는 유형

 

5.3.5. 매개변수 사이의 자료 전달 방법

 

값에 의한 자료전달 (call by value)

- 기본적이 자료전달 방법

- 실 매개변수와 형식 매개변수 사이에 값의 전달

- 호출한 함수의 실행이 끝난 다음 전달 받은 값을 되돌려 받지는 못한다.

 

참조에 의한 자료전달 ( call by reference)

- 호출함수와 피 호출함수의 매개변수 값을 서로 교환할 수 있는 자료전달 방법

- 값을 전달하는 것이 아니라 실 매개 변수의 값이 들어있는 주소 값이 전달된다.

 

 

(1) 값에 의한 자료 전달 방법

 실매개변수의 값이 형식매개 변수로 그대로 복사됨

 실 매개 변수의 값이 형식매개변수로 전달되는 방법을 값에 의한 자료 전달 방법이라고하며, 호출한 함수의 실행이 끝난 다음 전달 받은 값을 되돌려 받지 못한다.

** 실매개변수 값이 변하지 않음

fcn1(10, 20);  -----> 함수호출 ( 실 매개 변수 )

.......      자료전달 ( 값 전달 ) x = 10 , y = 20

int fcn1(int x, int y) ---->  함수 정의 (형식 매개변수)

//값에 의한 자료전달 예

#include <stdio.h>
void swap(int x, int y);    // swap () 함수의 원형 선언
void main(){
   int a = 3, b = 5;
   printf("호출 전 a = %d, b = %d \n", a, b);
   swap(a,b);                    // swap() 함수 호출
   printf("호출 후 a = %d, b = %d \n", a, b); }

void swap(int x, int y ){ //함수 정의, 반환값이 없으므로 void형 선언
   int temp; 
   temp = x; 
   x = y; 
   y = temp; 
   printf("함수 내 x = %d, y = %d \n", x, y);   } 

 

 

(2) 참조에 의한 자료 전달 방법

 값에 의한 자료 전달 방법에서는 실매개변수의 값을 형식매개변수에 그대로 복사해 주었지만

참조에 의한 자료 방법에서는 값이 형식매개변수에 그대로 복사해 주었지만

참조에 의한 자료 전달 방법에서는 값이 전달되는 것이 아니라 실매개변수의 값이 들어 있는 주소값이 전달

** 실매개변수 값이 변함

fcn1(&a, &b);   --------------- 함수호출 (실 매개변수)

...... 주소값 전달  ( &a = *x / &b = *y )

int fcn1(int *x, int *y)  --------- 함수정의 (형식 매개변수)

// 참조에 의한 자료 전달 방법 예

#include <stdio.h> 
void swap(int *x, int *y);  // swap() 함수의 원형 선언 
void main(){
   int a = 3, b = 5;
   printf("호출 전 a = %d, b = %d \n", a,b);
   swap(&a, &b);
/* 실매개변수 앞에 주소값을 전달하기 위해 주소 연산자 &를 붙임 */ 
   printf("호출 후 a = %d, b = %d \n", a,b);  }

void swap(int *x, int *y){ 
/* 주소값을 전달받기 위해 포인터 변수 int*x , int *y를 선언 */ 
   int temp; 
   temp = *x; 
   *x = *y; 
   *y = temp; 
   printf("함수 내 x = %d, y = %d \n", *x, *y); }

반응형
LIST

'방송통신대학 > C 프로그래밍' 카테고리의 다른 글

자동, 정적, 외부, 레지스터 변수 variable  (0) 2020.06.03
지역변수, 전역변수 variable  (0) 2020.06.02
함수의 호출 function  (0) 2020.05.31
사용자 정의 함수  (0) 2020.05.30
표준함수 function  (0) 2020.05.29

+ Recent posts