포인터

강효림·2022년 8월 21일
0

혼공C

목록 보기
8/8

어느덧 마지막 혼공미션!

메모리

메모리란 우리가 데이터를 넣고 꺼내쓰는 공간.
그 위치를 식별할 수 있어야한다.

프로그램이 사용하는 메모리의 위치를 주소값으로 식별 가능한데 이 주소 값은 바이트 단위로 구분된다.

주소연산자 &

여기서 주소란 변수가 할당된 메모리 공간의 시작 주소를 말한다. 시작주소를 알면 그 위치부터 변수의 크기만큼 메모리를 사용할 수 있다.
주소연산자 &을 사용해서 구한다.

주소를 확인하고 시작주소에 변수 크기를 더하면 메모리에 얼마나 할당되었는지 확인할 수 있다.

주소는 음수가 없으므로 %u 변환문자를 사용한다.

포인터와 간접 참조 연산자 *

포인터가 바로 변수의 메모리 주소를 저장하는 변수이다. 그래서 변수처럼 선언하고 사용하는데 변수 앞에 *을 붙여주어야 한다.
포인터의 자료형은 주소를 저장한 변수의 자료형을 적는다.

포인터 변수가 선언되면 변수명으로 사용할 수 있다.

포인터가 가리키는 변수를 사용할 때 간접 참조 연산자(포인터 연산자) (*)을 사용한다.

*pa = 10;

pa가 a를 가리키므로 *pa에 10을 대입하면 a에 10을 대입하는 것과 같다.

대입연산자의 왼쪽
pa가 가리키는 변수의 저장공간으로 사용

대입연산자의 오른쪽
pa가 가리키는 변수의 값으로 사용

저장공간의 위치를 알아내는 방법
간접 참조 연산자로 pa가 가리키는 변수를 구하고 다시 주소연산자로 주소를 구한다.

가리킨다

포인터가 어떤 변수의 주소를 저장한 경우 '가리킨다'라고 한다.
둘의 관계를 화살표로 표현한다.

pa->a
포인터 pa는 변수 a를 가리킨다.

const를 사용한 포인터

const 예약어는 포인터에 사용하면 가리키는 변수의 값을 바꿀 수 없다는 의미
즉, 상수화 한다는 의미이다.

pa가 가리키는 변수 a는 pa를 간접 참조하여 바꿀 수 없다.

const int *pa = &a;
pa = &b; ( O )

const int pa = &a;
pa = &b; ( X )

0개의 댓글