본문 바로가기

전자 공학/C언어 C++

[C언어 독학하기] 15. 포인터란(1)

반응형

 

 

 

안녕하세요. 취업한 공대누나입니다.

오늘은 C언어의 꽃이라고 불리는 포인터에 대해 배워보도록 하겠습니다.

가장 중요한 개념이면서 많은 사람들이 포기를 하는 챕터이기도 합니다.

저역시도 그랬고 다시 천천히 공부하는 중이니 포기하지 마세요

시작하겠습니다.

 

 

1. 어드레스

 

포인터에 대해 알기 위해서는 어드레스의 개념에 대해 먼저 이해하고 있어야 합니다.

어드레스는 말 그대로 주소입니다.

우리가 값을 넣은 변수가 어디에 있는지를 말하게 됩니다.

 

 

%p는 변수의 주소를 헥사값(16진수)로 표현할 때 사용하는 것입니다.

a의 어드레스를 다음과 같이 알 수 있습니다.

 

변수명의 앞에 &를 붙이면 그 변수의 어드레스를 나타냅니다.

이러한 어드레스(메모리 주소)는 고정된 것이 아니기 때문에 실행할 때마다 달라지게 됩니다.

 

메모리는 시작번지를 가지며 자료형의 크기에 따라 달라집니다.

예를 들어서 int형 같은 경우 4byte만큼의 공간을 잡고 5라는 값을 할당해준 것이 됩니다.

 

그림으로 보면 아래와 같이 설명이 됩니다.

 

 

여기서 5라는 값을 저장할 때는 굳이 공간을 많이 할당해야 하는

int형을 선언할 필요가 없다는 것도 살짝 알고 가셔도 괜찮습니다.

그만큼 메모리를 많이 잡아먹는것이니까요.

하지만 아직 공부 단계에서는 크게 신경쓰지 않으셔도 됩니다.

 

 

2. 포인터

 

포인터란 변수의 값을 저장하는 것이 아니라 변수가 저장되어 있는 

어드레스를 값으로 가지는 변수를 말합니다.

int형 포인터 변수를 선언은 아래와 같이 합니다.

int *a;

int* a;

두 개의 차이점을 아시겠나요?

바로 띄어쓰기의 위치인데요

int 띄고 *a나 int* 띄고 a나 둘 중에 하나 원하시는대로 선언을 해주시면 됩니다.

그리고 위와 같이 값을 대입할 때에는 &를 이용해주시면 되는데요.

아래에서 예제를 보도록 하겠습니다.

 

 

위의 예제와 크게 달라지지 않았습니다.

지금은 차근차근 익히며 읽어가도록 해주세요.

포인터 변수 p를 선언했고 그 곳에 a의 주소값을 대입해주었습니다.

그리고 결과가 잘 출력된 것을 확인할 수 있습니다.

 

 

 

3. 포인터가 가리키는 값의 참조

 

포인터명 앞에 *를 붙이면 그 포인트가 가리키는 값을 참조합니다.

 

위와 같은 예제에서 int b의 값에 *p를 대입해주었습니다.

그 결과 p가 가리키는 값인 a의 값이 참조된 것을 확인할 수 있습니다.

 

즉, 우리는 *를 사용해서 포인터가 가리키는 변수의 값을 바꿀 수도 있습니다.

 

 

위의 사진을 보시면 a의 값을 직접 바꾸지 않은 것을 확인할 수 있습니다.

*p가 가리키는 변수의 값을 바꿨고 그 결과 a에 값이 잘 바뀐 것을 확인할 수 있습니다.

 

 

 

오늘은 가장 간단한 예제를 가지고 포인터의 개념에 대해 살짝 다뤄보았습니다.

다음 시간부터 조금 더 적극적으로 포인터를 다뤄보도록 하겠습니다.

감사하니다.

반응형