[C] C언어 기초

[C] C언어의 포인터 및 메모리

ITsubin 2022. 4. 7. 10:38

포인터에 대해 알아보기 전, [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