포인터의 핵심 내용을 정리하고 공유하기
메모리의 주소
- 메모리는 우리가 데이터를 넣고 꺼내 ㅆ는 공간으로, 그 위치를 식별할 수 있어야 한다. 프로그램은 메모리의 위치를 주소 값으로 식별할 수 있다. 메모리의 값은 바이트 단위로 구분되며, 0부터 시작된다.
예를 들어 int형 변수 a가 메모리 100번지부터 할당되었다면 100번지부터 103번지까지 4바이트에 걸쳐 할당된다.
주소 연산자 : &
- 변수가 할당된 메모리 공간의 시작주소는 주소 연산자 &로 알아볼 수 있다.
위의 사진처럼 주소를 나타내는 %u와 주소 연산자 &를 사용하여 변수의 주소값을 구할 수 있다.
포인터와 간접 참조 연산자 : *
- 메모리의 주소는 필요할 때마다 계속 주소 연산을 수행하는 것보다 한 번 구한 주소를 저장해서 사용하면 편리한데, 포인터가 변수의 메모리 주소를 저장하는 변수이다. 변수 앞에 를 붙여주면 포인터를 사용할 수 있다.
_변수 a와 포인터 pa를 선언하였다.
pa에 a의 주소값을 넣고, 포인터로 변수 a에 10을 대입하였다.
pa = &a에서 pa는 a의 주소값을 갖게 되었고, pa = 10;에서 pa가 a의 주소값을 가리키며 10을 대입했다. 따라서 pa와 a는 10의 값을 갖게 되었다.
*pa = 20;
과 같이 pa가 가리키는 변수는 pa를 간접참조하여 바꿀 수 없다는 것이다.포인터의 대입 규칙
- 포인터는 가리키는 변수의 형태가 같을 때만 대입해야 한다.
- 형 변환을 사용한 포인터의 대입은 언제나 가능하다.
포인터를 사용하는 이유
- 포인터를 사용하려면 추가적인 변수 선언이 필요하며 여러가지 연산을 수행해야 하므로 포인터를 일부러 즐겨 사용할 필요는 없다. 하지만 임베디드 프로그래밍을 할 때 메모리에 직접 겁근하는 경우나 동적 할당한 메모리를 사용하는 경우엔ㄴ 포인터가 반드시 필요하다.
- 임베디드 프로그래밍 : 임베디드 시스템을 제어하기 위한 프로그램
나만의 언어로 포인터 정리하기
벌써 혼공학습단이 마지막주라니 아쉽기도 하고 후련하기도 하다.
포인터는 아직 어렵기 때문에 조금 더 공부를 할 것이다.
6주동안 열심히 혼공단 활동을 하면서 공부도 하고, 다른 사람들이 정리한 것들도 보면서 많이 배운 것 같다.🐣