매개변수 사이의 자료전달

값에 의한 자료 전달

  • 기본적인 자료 전달 방법
  • 실 매개변수와 형식 매개변수 사이에 값의 전달
  • 호출한 함수의 실행이 끝난 다음 전달받은 값을 되돌려 받지는 못한다

  • 예시
#include <stdio.h>  

void  swap(intx, int y);  
  
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 temp; // 두 변수 a와 b의 값을 서로 바꾼다.  
temp = x;  
x = y;  
y = temp;  
printf("함수내 x = %d, y = %d\n", x, y);  
}  
  
/*  
호출전 a = 3, b = 5  
함수내 x = 5, y = 3  
호출후 a = 3, b = 5  

피호출 함수 내에서의 형식매개변수의 값이 바뀌었지만 
실매개변수의 값은 변하지 않음
*/

참조에 의한 자료 전달

  • 호출함수와 피 호출함수의 매개변수 값을 서로 교환할 수 있는 자료전달 방법
  • 값을 전달하는 것이 아니라 실 매개변수의 값이 들어있는 주소 값이 전달된다

  • 예시
#include <stdio.h>  
 
void  swap(intx, int y);  
  
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);  
}  
  
/*  
호출전 a = 3, b = 5  
함수내 x = 5, y = 3  
호출후 a = 5, b = 3 -> 값의 변화가 생긴다.  
*/

기억클래스

  • 변수를 기억공간의 특정영역에 할당하는 방법
  • 즉, 각 변수의 유효범위와 존속기간을 설정
    • 변수의 사용위치에 따라 : 지역변수, 전역변수
    • 변수의 존속기간에 따라 : 자동변수, 정적변수, 외부변수, 레지스터변수

지역변수

  • 특정범위 내에서만 통용되는 변수
  • 선언된 블록이나 함수 내에서만 사용 가능
  • 함수에서 사용되는 매개 변수도 해당

전역변수

  • 함수 밖이나 외부파일에서 선언되어 프로그램 전체에 걸쳐 사용될 수 있는 변수

전역변수와 지역변수의 비교

  • 동일 범위 내에서는 지역변수가 우선
  • 전역변수의 선언은 프로그램 선두에 위치
  • 가급적 지역변수를 사용하는 것이 효율적
    • 함수의 독립석 향상
    • 디버깅 효율 향상
    • 기억 공간 절약

변수의 기억클래스 종류

  • 변수의 초기화, 존속기간, 유효범위에 따라 구별
    1. 자동 변수(auto)
    2. 정적 변수(static)
    3. 외부 변수(extern)
    4. 레지스터 변수(register)

  • 기억 클래스를 이용한 변수 선언
    • 형식 : 기억클래스 자료형 변수명;
    • 기능 : 기존의 변수 선언문에 기억클래스만 기입. 선언된 변수에 저장된 자료는 해당 기억영역에 놓이게 됨
    • 사용 예 : static int b;

  1. 자동 변수
    • 함수 실행시 만들어지고, 실행이 끝나면 기억공간이 제거 됨
    • 예약어 auto를 사용 (생략 가능)
    • 통용 범위는 변수가 선언된 블록이나 함수 내로 한정
    • 지역변수에 해당
    • 초기화가 필요

  2. 정적 변수
    • 기억 영역이 프로그램 끝날 때까지 유지
    • 예약어 static을 사용
    • 전역 변수에 해당
    • 변수의 값은 프로그램 실행 중 계속 유지
    • 초기화가 없으면 0으로 초기화 됨

  3. 외부 변수
    • 함수의 외부에서 선언
    • 예약어 extern을 사용
    • 전역 변수에 해당
    • 초기화가 없으면 0으로 초기화 됨
    • 다른 파일에서 외부변수로 선언된 변수의 값을 참조할 수 있다

  4. 레지스터변수
    • CPU 내의 레지스터에 자료를 저장하고자 할 때
    • 예약어 register를 사용
    • 자동 변수와 동일한 속성
    • 프로그램의 실행속도 증가를 목적으로 사용 (주로 반복문에서 카운터 변수로 사용)

Updated: