검색결과 리스트
글
<지역변수란?>
main()함수, 조건문, 반복문의 괄호, 함수의 매개 변수로 사용되는 변수이다.
<실습>
여기에서 main()함수의 지역변수 a와 func함수의 지역변수 a는 완전히 다른 변수이다. 왜냐? 생성된 곳이 하나는 main()함수이고 하나는 func()함수이기 때문이다.
이 구문의 문법을 차례대로 해석해보자.
1. main()함수의 변수 a생성 후, 그 안에 10을 저장
2. func함수의 변수 a생성 후 5대입, b생성 후 10대입.
3. func함수의 return문을 만났을때 함수가 종료되면서 변수 a와 b의 메모리 공간이 소멸됨
4. 마지막으로 main()함수의 return 0;을 만났을때 main()함수의 변수 a값이 소멸된다.
-결과-
<전역변수란?>
전역변수는 지역변수와 다르게 중괄호 외부에 선언되는 변수이다. 어느 지역에서도 사용이 제한되지 않는 즉, 프로그램 어디에서든 접근이 가능한 변수이다.
초깃값을 지정하지 않아도 자동으로 값을 0으로 가지며, 초기화 할 때 반드시 상수로 초기화 해야한다.
<실습>
-결과-
<정적변수란?>
함수의 내부, 조건문, 반복문 등과 같이 중괄호가 있는 지역에서 전역 변수의 기능을 갖고 싶을 때 사용한다. 정적 변수는 전역 변수처럼 프로그램이 종료되지 않는 한 메모리가 소멸되지 않고, 초깃값을 지정하지 않아도 자동으로 0을 갖는다.
구문)
static int num; // static을 사용해 정적변수를 만든다.
<실습>
abc()함수내에서 static을 사용하여 정적변수를 만들었다.
정적변수a는 마치 함수내에서 전역변수처럼 행동하는데 반해, b는 함수가 다시 호출될때 계속 초기화된다. 바로 이것이 정적변수a와 지역변수b의 차이다.
-결과-
정적변수에서 참고해야할 사항이 있는데, 정적변수는 괄호안에서만 전역변수처럼 사용하는 것이다. 괄호를 벗어나면 에러가 난다. 예를들어보자!
<실습>
-결과-
에러가 난다. 에러 메시지를 보면 다음과 같다.
선언되지 않는 식별자는 변수의 선언이 되지 않아서이다. 즉, 정적변수라는 것이 행동은 마치 전역변수처럼 한다고 하지만 그 범위는 괄호 안에서만이다! 꼭 잊어버리지 않도록~!
<레지스터 변수>
레지스터변수는 CPU내부의 임시 기억 장소 레지스터에 변수를 할당하여 값을 저장하는 변수이다. CPU내부에 저장하기 때문에 속도가 훨씬 빠르다.
그렇다면 지역변수와 레지스터 변수의 차이점은 무엇일까?
지역변수는 CPU외부에 있는 RAM에 변수를 할당하고 더 많은 CPU클럭을 사용하기 때문에 입출력 속도가 느리다.
레지스터 변수는 CPU내부의 임시 기억 장소인 레지스터에 변수를 할당하기 때문에 속도가 빠르다.
구문)
register int num; // register를 사용하여 레지스터 변수를 선언하여 사용한다.
'Programming > C' 카테고리의 다른 글
C언어 - 배열의 주소와 값의 참조, &연산자, *연산자 (1) | 2016.05.12 |
---|---|
C언어 - 1차원 배열 (0) | 2016.05.11 |
C언어 - 함수란? (0) | 2016.05.09 |
C언어 - switch~case문, break문 (0) | 2016.02.06 |
C언어 – do~while문 (0) | 2016.02.05 |
RECENT COMMENT