포인터(Pointer)
모든 변수는 메모리의 어느 공간에 2진수로 저장이 되어있다.
그리고 변수이름은 그 공간을 가리키는 별칭이고 변수이름을 통해 그 공간에 있는 값에 접근이 가능하다.
포인터는 그 주소를 저장할 수 있다.
int num=2;
int* p1 = #
포인터를 사용할 때는 타입 뒤에 * 을 붙인다. 그리고 어떤 변수의 주소값을 저장한다.
포인터가 아닌 어떤 변수의 주소에 접근할 때는 & 를 붙인다.
위의 코드는 p1 에 num 의 주소를 저장한다는 뜻이다.
이렇게 저장한 변수는
*p1 = 3;
int num2 = *p1;
이런식으로 사용이 가능하다.
첫번째 *p1 의 의미는 p1이 가리키는 주소에 접근하라는 뜻으로 그 주소에 3 을 저장하라는 의미이다.
두번째는 p1이 가리키는 주소에 접근해서 값을 꺼내 num2 에 저장하라는 의미이다.
처음엔 포인터가 정말 많이 헷갈리는데, 메모리의 각 주소마다 어떤 값을 저장할 수 있는 변수가 있다고 가정하자.
포인터는 주소를 값으로 저장할 수 있는 타입의 변수이고 그 포인터 변수에 * 을 붙이면 포인터 변수가 값으로 가지고 있는 주소에 가서 그 바구니에 접근하라는 뜻이다.
때문에 *p1 = 3 은 p1이 가지고 있는 주소값에 접근해서 그 바구니에 3을 저장하세요. 라는 의미고
num2 = *p1 은 p1 이 가지고 있는 주소값에 접근해서 그 바구니에 있는 값을 num2 에 저장하세요 라는 의미이다.
'C++' 카테고리의 다른 글
Visual Studio - LNK2001 에러 (0) | 2023.09.02 |
---|---|
포인터(Pointer) 연산 - C++ (0) | 2023.07.31 |