섭섭한 개발일지

포인터란? 본문

CS/Data Structure

포인터란?

Seop 2024. 4. 11. 22:29

자바에서는 포인터라는 단어를 본 적이 없을 것이다.

포인터는 주로 C언어에서 다루는 자료구조이다.

 

포인터는 Low level 언어에서 사용되며 개발자가 컴퓨터의 메모리에 직접적으로 접근해서 제어할 수 있는 도구다.

 

조금 더 친숙하게 알아보자

int a = 10;

 

 

위 코드에서는 10을 a라는 변수에 저장을 했다.

 

변수의 개념을 처음 배울때로 거슬러가면 나는 변수를 상자에 비유해서 배웠었다.

 

 

 

 

A라는 이름의 상자에 10을 넣는 것이다.

 

여기서부터 포인터를 이해하려면 자료가 저장되는 개념에 대해서 알아야한다.

예시에서 사용한 int 자료형으로 개념을 알아보자

 

int 자료형의 크기는 4byte 다

아래 그림과 같은 메모리 공간에 10이라는 숫자를 저장하는 것이다.

 

메모리 공간은 바이트마다 고유의 주소값을 가지고 있으며 4byte 크기의 공간을 지정하여 10이라는 숫자를 저장하고

시작 주소 값을 변수 A로, 4byte의 공간을 확보하는건 int 와 같은 타입을 설정할 때 지정이 된다.

 

int A = 10;

 

 

그럼 결과적으로 A라는 변수를 저장하면 아래와 같은 그림이 그려진다.

 

 

 

 

변수 A는 10을 저장한 것이 아닌 10이 저장되어 있는 메모리의 시작 주소를 가지고 있는 것이다.

 

변수 하나를 저장하기 위해 컴퓨터 내부에서 처리되는 공정을 알아봤다.

 

포인터는 위 설명에서 주소를 다루는 변수이다.

포인터는 자료의 주소 값을 나타낸다고 이야기할 수 있다.

 

 

이제부터 포인터에 대한 개념을 예시로 알아보자

c언어에서 포인터를 선언하는 방법을 알아보자

int a = 100;
int *ptrA = &a; // 포인터 선언

 

 

포인터에는 2가지 연산자가 있다.

 

1. 주소 연산자 (&)

2. 참조 연산자 (*)

 

 

 

주소 연산자 (&)

주소 연산자는 변수의 이름 앞에 사용하여, 해당 변수의 주소값을 반환한다.

'&'기호는 앰퍼샌드(ampersand)라고 읽으며, 번지 연산자라고도 한다.

 

 

참조 연산자 (*)

참조 연산자는 포인터의 이름이나 주소 앞에 사용하여, 포인터에 가리키는 주소에 저장된 값을 반환한다.

 

C언어에서 '*'기호는 사용하는 위치에 따라 다양한 용도로 사용되고

이항 연산자로 사용하면 곱셈 연산으로 사용되며, 포인터의 선언 시나 메모리에 접근할 때도 사용된다.

 

 

 

포인터의 참조

C언어에서 선언된 포인터는 참조 연산자 (*)를 사용하여 참조할 수 있다.

int a = 10;
int *ptrA = &a;    // 포인터 선언
int *pptrA = &ptrA; // 포인터 참조

 

 

'CS > Data Structure' 카테고리의 다른 글

자료구조란?  (0) 2024.04.10
Comments