포인터는 다른 객체의 주소, 또는 주소가 없음을 저장한다. 주소가 없음은 `nullptr`로 나타낸다. `NULL`이나 `0`은 정수와 섞이므로 새 코드에서 쓰지 않는다.
주소와 역참조
int value = 10;
int* p = &value;
*p = 12; // value가 12가 된다
int* none = nullptr;
if (p != nullptr) {
*p += 1;
}`&`는 주소를 구하고, `*`는 그 주소의 객체를 가리킨다. 선언 `int* p`와 식의 `*p`는 같은 글자이고 하는 일이 다르다.
배열과 포인터
배열 이름은 많은 식에서 첫 원소의 포인터로 바뀐다. `p + 1`은 다음 원소의 주소다. 한 칸이 `sizeof(int)`만큼 떨어진다는 뜻이지, 바이트 1이 아니다. 범위를 벗어난 포인터 연산으로 만든 주소를 역참조하면 안 된다.
날 포인터는 소유를 표현하지 못한다. 누가 `delete`하는지 타입만 보고는 알 수 없다. 소유는 뒤의 스마트 포인터 편에서 타입으로 옮긴다. 그때까지 포인터는 빌려 보는 주소로만 쓴다.
댓글
0개아직 댓글이 없습니다.