ProjectH4C 2기 코딩도장 Unit 34

P4C

2020. 7. 26. 20:30

반응형

Unit 34에서는 포인터에 대해 공부하게 된다.

우리가 변수를 생성하면 이렇게 메모리에 우리가 생성한 변수가 짜잔하고 생긴다.

메모리만 이해하면 포인터는 어렵지 않다고 합니다.

변수는 메모리의 특정 장소에 위치하고 있으므로 메모리 주소로도 표현이 가능합니다.

2주차에서 Codeup에 문제풀 때 scanf를 사용할 때 변수앞에 &를 붙여주었습니다.

이를 printf에서도 사용해주면

해당 변수의 메모리 주소가 나오게 됩니다.

(%p는 포인터의 약어입니다.)

위 결과를 보고 메모리 그림을 그리면 요렇게 변하게 됩니다.

포인터 변수

포인터 변수는 줄여서 포인터라고도 부릅니다.

이런식으로 선언할 수 있습니다.

이런식으로 해서 num1의 메모리 주소값을 numPtr(포인터 변수)에 넣어주고 출력을 이런식으로 하면

이런식으로 같은 값이 나오게 됩니다.

int *변수는 int형 공간을 가르키게 됩니다.

당연하겠지만 32비트와 64바이트에서는 포인터의 크기가 달라집니다.

역참조 연산자

포인터앞에 *를 붙이면 역참조 연산자가 됩니다.

역참조 연산자는 num1의 메모리 주소값이 가지고 있는 값인 10을 가지고 오게 됩니다.

이런 원리입니다.

여태까지한 포인터를 정리한 그림입니다.

디버거에서 포인터 확인하기

디버거를 사용하면 변수의 메모리주소, 포인터, 역참조를 쉽게 확인할 수 있습니다.

numPtr = *num1까지만 실행이 된 상태입니다.

이런식으로 진행된 모습입니다.

요길 누르면 주소안에 뭐가있는지 보여줍니다.

다음은 메모리에서 내용을 직접 확인하는 방법입니다.

메모리주소를 붙여넣어주면 이런식으로 16진수가 나오게 됩니다.

0a 00 00 00은 리틀엔디안 때문에 00 00 00 0a가 원래 값이고

a는 10진수로 10을 나타냅니다.

 

int말고도 long long, float, char 등 여러 자료형으로도 포인터 선언이 가능하다.

모든걸 대체해주는 void 포인터도 있는데 void 포인터의 경우는 크기가 정해지지 않아서 역참조를 할수는 없다.

이 외에도 포인터를 2번이나 사용하는 이중 포인터도 가능하다.

 

반응형

'P4C' 카테고리의 다른 글

ProjectH4C 2기 코딩도장 Unit 35  (0) 2020.07.27
ProjectH4C 2기 Codeup 91 ~ 100  (0) 2020.07.19
ProjectH4C 2기 Codeup 81 ~ 90  (0) 2020.07.19
ProjectH4C 2기 Codeup 71 ~ 80  (0) 2020.07.19
ProjectH4C 2기 Codeup 61 ~ 70  (0) 2020.07.17