▣ 포인터
● 포인터(pointer)란?
▷ 다른 변수, 구조체, 객체 등 값이 저장된 곳을 가리키는 변수
▶ 포인터 선언 형식
TypeName *ptrVar;
//TypeName : 가리킬 값의 자료형
// ptrVar : 포인터 변수의 이름
▷ 포인터의 사용
ptrVar = &var; // & : 주소 계산 연산자
*ptrVar = value; // *ptrVar : 포인터 ptrVar가 가리키는 곳
▶ 포인터 사용의 예 - SimplePt.cpp
#include <iostream>
using namespace std;
int main()
{
int a = 10;
int *ptr;
ptr = &a;
cout << "ptr이 가리키는 값 : " << *ptr << endl;
*ptr = 20;
cout << "변수 a의 값 : " << a << endl;
return 0;
}
▣ 동적 메모리 할당
● 동적 메모리 할당이란?
▷ 프로그램 동작 중에 기억공간의 필요성 및 소요량을 결정하여 필요한 공간을 할당하는 것
1) 기억 공간의 생성 시점: new 연산자의 실행 시점
2) 기억 공간의 소멸 시점: delete 연산자의 실행 시점
▶ 포인터 변수가 할당된 기억 공간을 가리키게 한다
▷ 메모리 할당 연산자
1) ptrVar = new TypeName;
2) ptrVar = new TypeName[n];
▶ 메모리 반납 연산자
1) delete ptrVar;
2) delete [ ] ptrVar;
▷ 단일 데이터 공간의 할당 및 반환 예 - 1
int *intPtr;
intPtr = new int;
*intPtr = 10;
▶ 단일 데이터 공간의 할당 및 반환 예 - 2
int *intPtr;
intPtr = new int;
*intPtr = 10;
...
delete intPtr;
intPtr = nullptr;
자유 메모리 공간을 반환한 후에 nullptr로 설정하여 intPtr 포인터가 아무도 가리키지 않는다는 걸 보여줘야 한다.
▷ 단일 데이터 공간의 할당 및 반환 예 - 3
int *intPtr;
intPtr = new int[4];
*intPtr = 10;
*(intPtr+1) = 20;
intPtr[2] = 30;
...
delete [] intPtr;
intPtr = nullptr;
▣ 참조
● l-value 참조
▷ 참조(reference)란?
1) 어떠한 대상을 가리키는 값(포인터와 유사함)
2) 참조 변수는 참조 대상의 별명처럼 사용할 수 있다.
3) l-value 참조 : 실체가 있는 대상(l-value)에 대한 참조
▶ l-value 참조 변수의 선언 형식
TypeName &refVar = varName;
// TypeName : 참조 대상의 자료형
// refVar : 참조 변수의 이름
// varName : 참조 대상
▷ l-value 참조변수 사용의 예
int a = 10, b = 20;
int &aRef = a; //참조는 이렇게 초기화하는 형태로만 가능하다.
cout << aRef << endl;
aRef = 100; // a = 100;
aRef = b; //b를 참조하라는 뜻이 아니라 b의 값을 aRef가 가리키는 a에 대입하라는 뜻이다.
// a = b;
포인터만 사용하는 것보다 참조 변수 사용하는 게 더 심플한 경우이다.
▶ const 참조
참조를 이용하여 참조 대상의 값을 바꿀 수 없다.
int x { 10 };
const int &xRef = x;
cout << xRef << endl; //x의 값을 읽어 출력한다
xRef += 10; // 오류: const 참조로 값을 수정할 수 없다
▷ 참조 변수가 포인터와 다른 점
- 참조 변수를 이용하여 값을 읽거나 저장할 때 일반 변수를 사용하는 형식과 동일하다
- 참조 변수는 초기화를 통해 반드시 어떤 대상을 참조해야 한다 (아무것도 참조하지 않는 상황은 발생하지 않는다)
- 참조 변수는 초기화를 통해 지정된 참조 대상을 바꿀 수 없어 참조의 유효기간 동안 하나의 대상만 참조할 수 있다
▷ const 참조를 이용하여 참조 대상의 값을 바꿀 수 없다.
● r-value 참조
▷ 사용한 후에는 그 값을 더 이상 가지고 잇을 필요가 없는 대상을 참조한다
▶r-value 참조의 용도
객체의 값을 다른 객체로 이동하는 것이다
'Programming > C++' 카테고리의 다른 글
C++ 언어 기초 (6) - 클래스와 객체 (0) | 2020.08.27 |
---|---|
C++ 언어 기초 (5) - 함수 (0) | 2020.08.26 |
C++ 언어 기초 (3) - 구조체와 클래스 (0) | 2020.08.26 |
C++ 언어 기초 (2) - 키워드,식별자,자료형,변수,연산자,형변환 (0) | 2020.08.26 |
C++ 언어 기초 (1) - 개념, 빌드(build), 명칭공간(namespace) (0) | 2020.08.26 |