C++언어

[Unreal Engine 8기] C++ 포인터

조현묵 2026. 3. 10. 22:29
  • 포인터의 정의
더보기

변수들은 특정한 값을 담는것
Ex) int = 정수 , double = 부동 소수점
이와 같이 포인터도 변수를 듯한다, 대신 포인터는 값을 담는 대신 변수의 주소를 담는다.
Ex) int* p 와 같이 선언된 p는 정수를 가리키는 포인터로서 int 변수의 메모리 주소를 저장함 

  • 값을담는일반 변수
더보기

일반 면수에서 대입 연산 ( = ) 을 하면 변수에 있는 값이 그대로 복사된다.

 

하나의 변수를 다른 변수에 대입하면 새로운 메모리 공간에 동일한 값이 복제된다.

따라서 복사 이후에 두 변수는 서로 독립적인 공간을 가지므로, 한 쪽 값을 변경해도 다른 쪽에는 영향이 없다는 것을 알수 있다.

  • 복사는 비영이 있다.
더보기

A = B의 의미는 B에 있는 내용을 A에 전부 복사한다는 의미이고, 이 복사를 할 때에는 비용 든다.

배열의 경우에는 동일한 타입의 변수가 여러개 있는 것과 같으므로 비용이 커질 수 있다.

이러한 복사 비용 때문에 C++ 에서는 직접 복사하는 방식 대신 변수의 주소를 가리켜서 동일한 데이터에 접근 할 수 있도록 하는 변수가 포인터 이다.

  • 포인터 변수의 연산
더보기

포인터의 모든 연산은 주소값과 관련이 있다.

아래 와 같은 2가지 연산이 가능하다. 이 2가지 연산은 오직 포인터 변수만 가능

  1. 변수의 주소값을 담을 수 있다.
  2. 담고 있는 주소값에 해당하는 메모리에 있는 값을 읽거나 수정 할 수 있다.

A = B 를 하면 B 에 있는 값이 A 변수에 그대로 저장됨

여기서 주목 할 것은 값이 저장 된다는 것이다.

따라서 값이 아닌 주소값을 정보를 제공하겠다는 것을 알려줘야 한다,

이때 사용하는 연산자가 &이다.

A=B 가 아닌, A=&B를 하게 되면 A에 B의 주소값이 들어 가게 된다.

  • 포인터 변수의 구성 요소
더보기

포인터는 주소 값 뿐만 아니라 가리키는 변수의 타입도 필요하다.

아래처럼 2가지 정보가 있어야 한다.

  1. 변수의 시작 주소
  2. 변수의 타입.(변수의 크기를 알기 위해 필요)

C++에서는 이를 위해 타입 정보를 포함한 포인터 변수를 사용한다.

포인터 변수는 선언 시 데이터 형 뒤에 *를 붙여 포인터임을 표시한다.

Ex) int* ptr 이라고 선언하면 ptr은 정수를 가리키는 포인터가 된다.

변수의 시각 주소 값을 담고,

해당 변수 타입이 정수라는 걸 알수 있다.

  • 배열 이름의 의미
더보기

일단 배열도 변수입니다. 따라서 변수의 기본적인 특성들을 가지고 있습니다.

  1. 배열이름은 배열의 시작 주소를 가지고 있다.
  2. 값을 저장할 수 있다.

배열만이 갖는 추가적인 특성이 있습니다.

  1. 인덱스를 통한 임의 접근이 가능한 이유는 배열은 메모리가 연속적으로 할당되기 때문입니다.
  2. 임의 접근이 가능하려면 배열 이름에 저장된, 배열의 시작 주소를 알아야 한다.
    이러한 이유로 배열 자체가 담고 있는 시작 주소를 변경할 수 없다.
  3. 배열 이름은 주소값을 담고 있기 떄문에, 기존 포인터와 마찬가지로 + 연산자를 활용해서 해당 주소에 있는 값을 확익 할수 있다.
  4. 값을 읽는 것뿐 아니라, 기존 포인터와 마찬가지로 + 연산자를 활용해서 값을 넣을 수도 있다.
  • 배열과 포인터의 차이
더보기

배열의 이름은 사용될 때 대부분 포인터로 암시적 형 변환되어 동작한다.

Ex) int arr [ 4 ]; 가 있을때 arr 은 배열 전체를 의미한다.

하지만 식이나 인자로 사용되면 int* 형으로 변환되어 배열의 첫 번쨰 원소 주소로 해석된다.

조금 다른 점이 있다면 이 주소값은 변경할 수 없다.

  • 배열과 포인터의 차이
  1. 배열 이름은 주소값을 담고 있지만, 이 주소값 대신 다른 주소값을 할당할 수 없다.
  2. 변수의 크기가 다르다.
  • 포인터 배열과 배열 포인터
더보기

포인터에 대한 배열과 관련된 특징

  1. 포인터 배열은 포인터를 원소로 갖는 배열입니다.
    int* ptrArr[  4  ]; 는 크기가 4이고, 각 원소가 int*인 배열
  2. 배열 포인터는 배열 전체를 가리키는 포인터입니다.
    단일 변수가 아닌 배열 통쨰로 가리키는 변수 이다.
  • 포인터 연산
더보기

포인터는 주소값을 담는다.
일반적인 수치 연산이 아닌 메모리 주소의 이동으로 해석된다.

 

  1. ptr + 1
    ptr + 1 을 실행하면 ptr 이 가리키는 주소에서 한 단위 메모리 주소가 이동한다.
    이 한 단위라는 것은 포인터 자료형 크기에 따라 결정된다.
  2. ( * ptr ) + 1
    ptr 이 가르키는 변수의 값을 1 증가시킨다.
  3. *( ptr + 1)
    *( ptr + 1 )은 ptr [ 1 ] 과 동일하다.

 

'C++언어' 카테고리의 다른 글

[Unreal Engine 8기] C++ 레퍼런스  (1) 2026.03.11
[Unreal Engine 8기] C++ 언어 기초3  (0) 2026.03.09
[Unreal Engine 8기]C++언어 기초2  (0) 2026.03.06
[Unreal Engine 8기] C++언어 기초1  (0) 2026.03.05