본문 바로가기

Algorithm/C프로그래밍

[C언어] 포인터 개념 (2): 포인터 자료형 이해하기 + 포인터 변수 선언하기

반응형

* 출처: 코딩도장 34.1 포인터 변수 선언하기

* 출처: 최유경 교수님 C 프로그래밍 포인터 수업자료

 

저번 게시글에서 변수의 메모리 주소를 구하는 방법을 알아보았다.(변수 앞에 &를 붙인다.)

※ 메모리 주소 값이 포인터 변수에 저장되면, 그 포인터 변수 자체가 공간을 나타낸다. 

포인터로 저장되면 공간을 가리키는 효과가 나타난다고 이해하자.

 

그렇다면 그 메모리 주소는 어디에 저장하는 것일까? 바로 포인터 변수에 저장한다.

포인터 변수는 *를 사용하여 선언하며 포인터 변수를 포인터로 줄여서 부르기도 한다.


■ 포인터 (자료형)

- 주소를 나타내는 특수 자료형

- 주소는 기본적으로 양의 정수로 표현되지만, int형과 다르다.

출처: 최유경 교수님 강의 자료


- 자료형 *포인터변수이름;

- 포인터=& 변수;

 

포인터 변수를 선언할 때는 자료형 뒤에 *(Asterisk, 애스터리스크)를 붙인다.

자료형에 붙이든, 변수 쪽에 붙이든 같은 뜻이다.

1. 포인터 변수 선언: 포인터 변수 numPtr 와 정수 변수 num1 선언

2. 포인터 대입(연결) &로 num1 변수의 주소 구해서 포인터 변수 numPtr 변수에 저장

포인터 변수에 주소를 대입하여 특정 변수와 연결 시키는 것을 "가리킨다"라고 표현한다.

이를 그림에서는 화살표로 표시한다.

3. 즉, 포인터 변수에 저장된 값은 메모리 주소와 같다.


 

 

변수가 int형이면 이 변수의 메모리 주소를 저장하는 포인터는 int *이다.

 

int *는 영어로 pointer to int라고 한다.

int 형 공간을 가리키는 포인터라는 뜻이다.

 

출처: 코딩도장

즉, 포인터는 메모리의 특정 위치를 가리킬 때 사용한다.

 

포인터와 메모리 (출처: 코딩도장)

 

예를 들어, num1의 메모리 주소가 008AF7FC라고 하자. 그렇다면

num1 == 10
&num1 == 008AF7FC
numPtr == 008AF7FC

∴ &num1 == numPtr == 008AF7FC

 

numPtr(포인터 변수)은 10이 저장된 메모리 공간을 가리킨다. 즉, 변수 num1이 있는 공간을 가리키게 된다.

출처: 코딩도장

※ sizeof로 포인터의 크기 구하기 (32비트or 64비트)

sizeof로 포인터의 크기 구하면
32비트에서는 4바이트, 64비트에서는 8바이트로 나온다.

- sizeof(포인터 변수)
- sizeof(자료형 *)

시스템의 비트 수에 따라 메모리 주소의 범위도 달라진다.
∨ 32비트: 16진수 8자리
- 0x00000000~0xFFFFFFFF (ex. 0x008AF7FC)
∨ 64비트: 16진수 16자리
- 0x0000000000000000~0xFFFFFFFFFFFFFFFF (ex. 0x00000000008AF7FC)

 

반응형