포인터에 대해 알아보기 전, [C] C언어의 함수와 변수 포스팅에서 언급했던 자료형을 다시 보겠습니다.
[ C언어에서의 자료형 ]
- 정수 short : 2byte
- 정수 int : 4byte
- 실수 float : 4byte
- 실수 double : 8byte
- 문자 char : 1byte
[ 포인터(Pointer)란? ]
- C언어에서의 포인터는 "주소를 저장하는 변수"입니다.
- 포인터는 "포인터 변수"라고 부릅니다.
- C언어의 장점 중 하나가 바로 포인터(포인터 변수)이지만, C언어를 처음 배울 때 어려운 이유이기도 합니다.
[ 포인터(Pointer) 사용 시 장점? ]
- 메모리 주소를 참조해서 다양한 자료형 변수들의 접근과 조작이 용이합니다.
- 메모리 주소를 참조하여 배열과 같은 연속된 데이터에 접근과 조작이 용이합니다.
- 동적 할당된 메모리 영역(힙영역)에 접근과 조작이 용이합니다.
[ 포인터(Pointer) 변수의 선언 ]
포인터 변수의 선언은 변수의 선언과 비슷합니다.
int num1; 처럼 변수를 선언하듯
int * p1; 처럼 포인터 변수를 선언할 수 있습니다.
[ 포인터 변수 선언의 형식 ]
자료형 * 포인터 변수 이름;
[ 포인터 변수 초기화 형식 ]
포인터 변수를 초기화하는 방법은 두 가지입니다. NULL값을 대입하거나, 0을 대입하는 방법입니다.
(NULL값 대입 방법이 가장 많이 사용됩니다.)
자료형 * 포인터 변수 이름 = NULL;
자료형 * 포인터 변수 이름 = 0;
[ 메모리 관련 연산자 ]
1. & : 주소 연산자
2. * : 포인터 연산자
포인터 변수를 선언할 때는 포인터 연산자를 사용합니다.
포인터 연산자의 개수에 따라 다차원 포인터 변수를 선언할 수 있지만,
이번 포스팅에서는 1차원 포인터 변수에 대해서만 다루겠습니다.
주소 연산자는 변수의 주소를 불러올 때 사용합니다.
메모리에 대한 이해를 돕기 위해 그림을 가져왔습니다.
아래 그림처럼 100이라는 주소로 시작하는 메모리의 일부가 있다고 가정을 하겠습니다.
메모리의 각 방은 1byte입니다.
int a[3] = { 10, 20, 30 }으로 배열 a를 선언 및 초기화했을 때 배열 a는 101번 주소부터 시작한다고 가정하겠습니다.
int형은 4byte이고, 배열의 크기는 3이기 때문에 배열 a는 메모리 주소 101번부터 12개의 방을 차지합니다.
배열 a는 길이가 3이기 때문에 a[0], a[1], a[2] 의 방 3개로 나뉘어져 있습니다.
a[0]은 101번 주소부터 시작하고, a[1]은 105, a[2]는 109번 주소부터 시작합니다.
저희가 주목해야 할 것은 a[0]의 시작 주소입니다.
a[0]의 시작 주소는 배열 a의 시작 주소와 같습니다.
결국 a의 주소와 a의 첫 번째 index값의 주소는 같습니다.
'[C] C언어 기초' 카테고리의 다른 글
[C] C언어의 포인터 및 메모리_3 (0) | 2022.04.09 |
---|---|
[C] C언어의 포인터 및 메모리_2 (0) | 2022.04.08 |
[C] C언어 연습문제 (5) | 2022.04.05 |
[C] C언어 기초 함수 (0) | 2022.04.04 |
[C] C언어의 배열(array) (0) | 2022.04.03 |