728x90
반응형
※ 공부 내용의 복습 개념으로 정리된 글입니다. - 출처 시나공
포인터와 포인터 변수
포인터는 변수의 주소를 말하며, C언어에서는 주소를 제어할 수 있는 기능을 제공합니다.
- C언어에서 변수의 주소를 저장할 때 사용하는 변수를 포인터 변수라 합니다.
- 포인터 변수를 선언할 때는 자료의 형을 먼저 쓰고 변수명 앞에 간접 연산자 *를 붙입니다. (int *a;).
- 포인터 변수에 주소를 저장하기 위해 변수의 주소를 알아낼 때는 변수 앞에 번지 연산자 &를 붙입니다.(a = &b;).
- 실행문에서 포인터 변수에 간접 연산자 *를 붙이면 해당 포인터 변수가 가리키는 곳의 값을 말합니다.(c = *a;).
- 포인터 변수는 필요에 의해 동적으로 할당되는 메모리 영역인 힙 영역에 접근하는 동적 변수입니다.
- 포인터 변수의 용도
- 연결된 자료 구조를 구성하기 위해 사용합니다.
- 동적으로 할당된 자료 구조를 지정하기 위해 사용합니다.
- 배열을 인수로 전달하기 위해 사용합니다.
- 문자열을 표현하기 위해 사용합니다.
- 커다란 배열에서 요소를 효율적으로 저장하기 위해 사용합니다.
- 메모리에 직접 접근하기 위해 사용합니다.
예를 들어, a 변수에 100을 저장시키고, a 변수의 주소를 포인터 변수 b에 기억시켰다면 다음 그림과 같이 표현하고 말할 수 있습니다.
예제1 : 다음 C언어로 구현된 프로그램의 출력 결과를 확인하시오.
위 코드의 실행 과정에 따라 메모리의 변화를 그려보면 다음과 같습니다.
※ 메모리 영역
- 코드 영역
- 실행할 프로그램의 코드가 저장됩니다.
- 데이터 영역
- 전역 변수와 정적 변수가 저장됩니다.
- 힙 영역
- 필요에 의해 동적으로 할당되는 영역입니다.
- 스택 영역
- 함수의 매개 변수와 지역 변수가 저장됩니다.
포인터와 배열
배열을 포인터 변수에 저장한 후 포인터를 이용해 배열의 요소에 접근할 수 있습니다.
- 배열 위치를 나타내는 첨자를 생략하고 배열의 대표명만 지정하면 배열의 첫 번째 요소의 주소를 지정하는 것과 같습니다.
- 배열 요소에 대한 주소를 지정할 때는 일반 변수와 동일하게 & 연산자를 사용합니다.
- 배열의 요소가 포인터인 포인터형 배열을 선언할 수 있습니다.
예제 : 다음의 출력 결과를 확인하시오.
코드의 실행 과정에 따라 메모리의 변화를 그려보면 다음과 같습니다.
- p + 0 : 배열의 시작 주소에 0을 더했으므로, 배열의 시작 주소인 '1000' 번지 그대로입니다.
- *(p + 0) : '1000' 번지의 값은 10입니다. 10을 출력합니다.
- p + 1 : '1000'에서 한 번지 증가한 주소는 '1004'번지입니다.
- *(p + 1) : '1004' 번지의 값은 11입니다. 11을 출력합니다.
- p + 2 : '1000'에서 두 번지 증가한 주소는 '1008' 번지입니다.
- *(p + 2) : '1008' 번지의 값은 12입니다. 12를 출력합니다.
728x90
728x90
반응형
'정보처리산업기사' 카테고리의 다른 글
정보처리산업기사 - 프로그래밍 언어 활용 - Python의 기초 (0) | 2024.08.20 |
---|---|
정보처리산업기사 - 프로그래밍 언어 활용 - 사용자 정의 함수 (0) | 2024.08.19 |
정보처리산업기사 - 프로그래밍 언어 활용 - 배열과 문자열 (0) | 2024.08.16 |
정보처리산업기사 - 프로그래밍 언어 활용 - 반복문 (0) | 2024.08.15 |
정보처리산업기사 - 프로그래밍 언어 활용 - 제어문 (0) | 2024.08.14 |