[C 프로그래밍] 함수 및 기억 클래스
매개변수 사이의 자료전달
값에 의한 자료 전달
- 기본적인 자료 전달 방법
- 실 매개변수와 형식 매개변수 사이에 값의 전달
-
호출한 함수의 실행이 끝난 다음 전달받은 값을 되돌려 받지는 못한다
- 예시
#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 -> 값의 변화가 생긴다.
*/
기억클래스
- 변수를 기억공간의 특정영역에 할당하는 방법
- 즉, 각 변수의 유효범위와 존속기간을 설정
- 변수의 사용위치에 따라 : 지역변수, 전역변수
- 변수의 존속기간에 따라 : 자동변수, 정적변수, 외부변수, 레지스터변수
- 변수의 사용위치에 따라 : 지역변수, 전역변수
지역변수
- 특정범위 내에서만 통용되는 변수
- 선언된 블록이나 함수 내에서만 사용 가능
- 함수에서 사용되는 매개 변수도 해당
전역변수
- 함수 밖이나 외부파일에서 선언되어 프로그램 전체에 걸쳐 사용될 수 있는 변수
전역변수와 지역변수의 비교
- 동일 범위 내에서는 지역변수가 우선
- 전역변수의 선언은 프로그램 선두에 위치
- 가급적 지역변수를 사용하는 것이 효율적
- 함수의 독립석 향상
- 디버깅 효율 향상
- 기억 공간 절약
- 함수의 독립석 향상
변수의 기억클래스 종류
- 변수의 초기화, 존속기간, 유효범위에 따라 구별
- 자동 변수(auto)
- 정적 변수(static)
- 외부 변수(extern)
- 레지스터 변수(register)
- 자동 변수(auto)
- 기억 클래스를 이용한 변수 선언
- 형식 : 기억클래스 자료형 변수명;
- 기능 : 기존의 변수 선언문에 기억클래스만 기입. 선언된 변수에 저장된 자료는 해당 기억영역에 놓이게 됨
- 사용 예 : static int b;
- 형식 : 기억클래스 자료형 변수명;
- 자동 변수
- 함수 실행시 만들어지고, 실행이 끝나면 기억공간이 제거 됨
- 예약어 auto를 사용 (생략 가능)
- 통용 범위는 변수가 선언된 블록이나 함수 내로 한정
- 지역변수에 해당
- 초기화가 필요
- 함수 실행시 만들어지고, 실행이 끝나면 기억공간이 제거 됨
- 정적 변수
- 기억 영역이 프로그램 끝날 때까지 유지
- 예약어 static을 사용
- 전역 변수에 해당
- 변수의 값은 프로그램 실행 중 계속 유지
- 초기화가 없으면 0으로 초기화 됨
- 기억 영역이 프로그램 끝날 때까지 유지
- 외부 변수
- 함수의 외부에서 선언
- 예약어 extern을 사용
- 전역 변수에 해당
- 초기화가 없으면 0으로 초기화 됨
- 다른 파일에서 외부변수로 선언된 변수의 값을 참조할 수 있다
- 함수의 외부에서 선언
- 레지스터변수
- CPU 내의 레지스터에 자료를 저장하고자 할 때
- 예약어 register를 사용
- 자동 변수와 동일한 속성
- 프로그램의 실행속도 증가를 목적으로 사용 (주로 반복문에서 카운터 변수로 사용)
- CPU 내의 레지스터에 자료를 저장하고자 할 때