- 포인터의 정의
변수들은 특정한 값을 담는것
Ex) int = 정수 , double = 부동 소수점
이와 같이 포인터도 변수를 듯한다, 대신 포인터는 값을 담는 대신 변수의 주소를 담는다.
Ex) int* p 와 같이 선언된 p는 정수를 가리키는 포인터로서 int 변수의 메모리 주소를 저장함
- 값을담는일반 변수
일반 면수에서 대입 연산 ( = ) 을 하면 변수에 있는 값이 그대로 복사된다.
하나의 변수를 다른 변수에 대입하면 새로운 메모리 공간에 동일한 값이 복제된다.
따라서 복사 이후에 두 변수는 서로 독립적인 공간을 가지므로, 한 쪽 값을 변경해도 다른 쪽에는 영향이 없다는 것을 알수 있다.
- 복사는 비영이 있다.
A = B의 의미는 B에 있는 내용을 A에 전부 복사한다는 의미이고, 이 복사를 할 때에는 비용 든다.
배열의 경우에는 동일한 타입의 변수가 여러개 있는 것과 같으므로 비용이 커질 수 있다.
이러한 복사 비용 때문에 C++ 에서는 직접 복사하는 방식 대신 변수의 주소를 가리켜서 동일한 데이터에 접근 할 수 있도록 하는 변수가 포인터 이다.
- 포인터 변수의 연산
포인터의 모든 연산은 주소값과 관련이 있다.
아래 와 같은 2가지 연산이 가능하다. 이 2가지 연산은 오직 포인터 변수만 가능
- 변수의 주소값을 담을 수 있다.
- 담고 있는 주소값에 해당하는 메모리에 있는 값을 읽거나 수정 할 수 있다.
A = B 를 하면 B 에 있는 값이 A 변수에 그대로 저장됨
여기서 주목 할 것은 값이 저장 된다는 것이다.
따라서 값이 아닌 주소값을 정보를 제공하겠다는 것을 알려줘야 한다,
이때 사용하는 연산자가 &이다.
A=B 가 아닌, A=&B를 하게 되면 A에 B의 주소값이 들어 가게 된다.
- 포인터 변수의 구성 요소
포인터는 주소 값 뿐만 아니라 가리키는 변수의 타입도 필요하다.
아래처럼 2가지 정보가 있어야 한다.
- 변수의 시작 주소
- 변수의 타입.(변수의 크기를 알기 위해 필요)
C++에서는 이를 위해 타입 정보를 포함한 포인터 변수를 사용한다.
포인터 변수는 선언 시 데이터 형 뒤에 *를 붙여 포인터임을 표시한다.
Ex) int* ptr 이라고 선언하면 ptr은 정수를 가리키는 포인터가 된다.
변수의 시각 주소 값을 담고,
해당 변수 타입이 정수라는 걸 알수 있다.
- 배열 이름의 의미
일단 배열도 변수입니다. 따라서 변수의 기본적인 특성들을 가지고 있습니다.
- 배열이름은 배열의 시작 주소를 가지고 있다.
- 값을 저장할 수 있다.
배열만이 갖는 추가적인 특성이 있습니다.
- 인덱스를 통한 임의 접근이 가능한 이유는 배열은 메모리가 연속적으로 할당되기 때문입니다.
- 임의 접근이 가능하려면 배열 이름에 저장된, 배열의 시작 주소를 알아야 한다.
이러한 이유로 배열 자체가 담고 있는 시작 주소를 변경할 수 없다. - 배열 이름은 주소값을 담고 있기 떄문에, 기존 포인터와 마찬가지로 + 연산자를 활용해서 해당 주소에 있는 값을 확익 할수 있다.
- 값을 읽는 것뿐 아니라, 기존 포인터와 마찬가지로 + 연산자를 활용해서 값을 넣을 수도 있다.
- 배열과 포인터의 차이
배열의 이름은 사용될 때 대부분 포인터로 암시적 형 변환되어 동작한다.
Ex) int arr [ 4 ]; 가 있을때 arr 은 배열 전체를 의미한다.
하지만 식이나 인자로 사용되면 int* 형으로 변환되어 배열의 첫 번쨰 원소 주소로 해석된다.
조금 다른 점이 있다면 이 주소값은 변경할 수 없다.
- 배열과 포인터의 차이
- 배열 이름은 주소값을 담고 있지만, 이 주소값 대신 다른 주소값을 할당할 수 없다.
- 변수의 크기가 다르다.
- 포인터 배열과 배열 포인터
포인터에 대한 배열과 관련된 특징
- 포인터 배열은 포인터를 원소로 갖는 배열입니다.
int* ptrArr[ 4 ]; 는 크기가 4이고, 각 원소가 int*인 배열 - 배열 포인터는 배열 전체를 가리키는 포인터입니다.
단일 변수가 아닌 배열 통쨰로 가리키는 변수 이다.
- 포인터 연산
포인터는 주소값을 담는다.
일반적인 수치 연산이 아닌 메모리 주소의 이동으로 해석된다.
- ptr + 1
ptr + 1 을 실행하면 ptr 이 가리키는 주소에서 한 단위 메모리 주소가 이동한다.
이 한 단위라는 것은 포인터 자료형 크기에 따라 결정된다. - ( * ptr ) + 1
ptr 이 가르키는 변수의 값을 1 증가시킨다. - *( 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 |