티스토리 뷰
혼공 6주차 기본미션
포인터 내용 블로깅 하기
메모리의 주소 값을 이용하는 '포인터'
포인터 개념이란, 선언된 블록({ }) 안에서만 사용할 수 변수와는 다르게 사용 범위를 벗어난 경우도 데이터를 공유할 수 있는 새로운 방법이다.
포인터 또한 변수들처럼 선언하고 사용하되, 선언할 때 앞에 *를 붙인다. *는 포인터임을 표시하는 기호. 그 뒤에 써야 하는 자료형은 변수의 자료형을 적는다.(int형 변수의 주소를 저장할 땐 int를, double형 변수의 주소를 저장할 땐double을)
- 포인터를 선언하는 방법
int *pa;
(주소 위치에 있는 변수의 자료형)(포인터 기호)(포인터 이름)
- 포인터에 주소를 할당하는 방법
pa = &a;
(포인터 이름)(주소 연산자)(변수명)
이제 포인터 pa는 변수 a가 메모리 어디에 할당되었는지 그 위치를 저장하고 있으며, 이렇게 포인터가 어떤 변수의 주소를 저장한 경우 '가리킨다' 라고 표현. pa -> a 처럼 화살표로 간단히 표현한다.
pa -> a
포인터가 가리키는 변수를 사용할 때는 포인터에 특별한 연산자를 사용하는데, 이를 간접 참조 연산자(*) 라고 한다. 또는 포인터 연산자 라고도 한다.
*pa == a
포인터는 주소를 저장하는 일정한 크기의 메모리 공간이기에 언제든지 다른 주소를 저장하고 포인터끼리 대입할 수 있다. 그러나 일반 변수와는 달리 대입 연산에 엄격한 기준이 적용된다.
- 주소와 포인터의 차이
주소는 변수에 할당된 메모리 저장 공간의 시작 주소 값 자체이고, 포인터는 그 값을 저장하는 또 다른 메모리 공간이다. 따라서 특정 변수의 주소 값은 바뀌지 않지만 포인터는 다른 주소를 대입하여 그 값을 바꿀 수 있다.
한마디로 주소는 상수, 포인터는 변수.
따라서 두 포인터가 같은 주소를 저장하는 일도 가능하다.
- 주소와 포인터의 크기
포인터의 크기는 저장할 주소의 크기에 따라 결정된다. 모든 주소와 포인터는 가리키는 자료형과 상관없이 그 크기가 같다. (sizeof 연산자로 확인 가능)
- 포인터의 대입 규칙
포인터는 가리키는 자료형이 일치할 때만 대입할 수 있다.
int *p;
double *pd;
pd = p; (X)
마지막 미션이니만큼 미리미리 해서 올렸으면 좋았을텐데 그렇지 못해 아쉬움이 남는다. 그래도 6주동안 마감 맞춰 블로깅 하는 동안 열심히 했다는 뿌듯함이 남아 좋다. 3기가 열린다면 이번엔 파이썬으로 도전해볼 생각.