728x90

포인터

 

들어가기 전에... C언어를 배울때 포인터만 알아도 70%는 성공한거다 라는 말이 있었다

그 만큼 포인터의 기능이 막강하다고한다. 우리는 그동안 골치 아프게 속 썩였던 포인터란 늠을 한번 파해쳐보자..

알고보면 쉬운 포인터, 그런데 그 개념을 알기까지는 그리 쉽지는 않은데요 

 

포인터?

 

변수는  값(value)을 저장하는 녀석이죠~

이 변수란 녀석은 선언된 형(type)에 따라서 값(value)을 저장하는 녀석이다~

이 말입니다. 너무 어렵게 설명했죠? 쉽게 말해서 i라는 변수가 있는데 이게 int형(type)로 선언되면

int가 표현할 수 있는 값(value), 즉 정수 값(value)만을 저장하는 녀석이다~

이 말입니다. (물론 형변환 어쩌구 저쩌구 해서 다른 값을 집어넣을 수도 있지만 저는 그렇게 복잡하게 생각하지 않습니다.!)

 

int i;

i = int형이 표현할 수 있는 값(value)을 집어넣습니다. 만약 int i; 라는 코드를 입력했다면 이건 무슨 뜻일까요

위에서 말했듯이 int형의 값을 저장하는 i라는 변수가 됩니다.

그렇다면!! 아래 코드는 어떤 내용일까요?

 

int i, j;

i = j;

 

뭐 이것도 간단하네요

int형의 값을 저장하는 i와 j라고 하는 변수를 선언하고i라는 변수에 j를 대입시킨다.

 

근데.. 이것 뿐입니까? 더 다른건 없나요?

없긴 왜 없습니까! i에 j를 대입한다고 하잖아요!

이때 컴파일러에서는 어떠한 작업을 수행하느냐~ 이 말입니다!

 

'뭐 당연히 j의 값을 i에 대입하겠지~'

라고 생각하신다면 아주아주 큰~~~~ 오산 입니다!

 

이렇게 생각하고 계신분들 지금부터 그 내용 머리속에서 싹 지워버리세요.

이제부터 개념적으로 설명 드리겠습니다.

 

 

메모리라고 아시나요?

모든 전역변수나 지역변수 정적변수 동적변수들은

죄다 이 메모리에 영역을 할당 받은 다음에 주소라는 것을 받게 됩니다.

그래서 다음에 이 변수를 참조(읽고 쓰는)할 일이 생기면

이 메모리의 이 주소로 찾아가서 값을 참조하는 것이죠

 

이 말은 다들 프로그래밍을 하면서 한번 쯤 들어 보셨을거라고 생각해요.

이게 아주 중요한 개념 입니다.

 

우리는 어떻게 메모리상에 저장된 변수를 참조(읽고 쓰는)를 할 수 있을까요?

위에서 잠깐 언급 했지만 그건 바로 주소(Address) 라는 개념때문에 가능합니다.

이게 포인터의 핵심입니다! 주소를 이해하지 못한채로 포인터를 때려잡는다는건

계란에 바위치기인 격이죠.

그럼 이제 주소란 녀석을 알아봐야 겠네요

 

우리가 어떠한 변수를 선언하던 모든 변수는

메모리상에서 주소를 할당받아서 존재할 수 있는 겁니다.

그 변수를 참조(읽고 쓰는)할땐 할당받은 그 메모리 주소로 찾아가서

값을 읽고 쓰는 것이죠.

너무 어렵죠? 압니다 그래서 좀 더 쉽게 표현해보도록 하죠

 

우리가 int i 라고 선언을 하면 이 i변수는

메모리한테 이렇게 말합니다

 

 

"변수 : 이~메모리. 나 추운데 입고 자고 먹을 집 하나 마련해 주시지?"

"메모리 : 그래? 그럼 마땅한 집이.. 어! 여깄다. 마침 [100]이라는 집이 비었는데

             거기서 한번 먹고 자고 해볼래?"

"변수 : 그러지 뭐~ 그럼 앞으로 내가 필요할땐 [100]이라는 곳으로 찾아와"

"메모리 : 알았어"

 

 

어때요? 개념이 잡히나요?

저 내용중에서 집을 주소라고 생각해 보세요. 개념이 잡히죠?

우리가 변수를 선언해서 그 변수가 [100]이라는 주소를 가졌다면

i = 10; 이 문장은 메모리상의 [100]이라는 주소로 찾아가 그 값에 10을 대입한다.

라는 뜻이 되는 겁니다 i는 실상 [100]이라는 주소를 편리하게 관리하도록

임시적으로 만든 변수일 뿐이죠.

아..참고로 여기선 [100]이라는 주소를 할당 받았는데 어떤 주소를 받게 될지는

아무도 모릅니다~ 며느리도 모르지요 ㅡ.ㅡ;

 

여기서 중요한 점이 있는데 주소(Address)와 값(Value)는 전혀 다른 것입니다.

우리가 변수를 선언하면 메모리상에서 "주소"와 "값"이 함께 할당되는 것입니다

이 "값"을 참조하기 위해선 "주소"를 이용해야 하는 거구요.

쉽게 말해서 i = 20 이란 문장은

i라는 변수의 메모리 "주소"에 20이라는 "값"을 대입한다.

라고 해석할 수 있는 겁니다. 이해 가시죠?

 

 

그렇다면 처음으로 돌아가서

i = j;

이 문장은 어떻게 해석을 해야 할까요?

i에 j의 값을 대입한다라고 말한건 아주 큰 오산이라고 했습니다.

아직 잘 모르시겠다구요?

모든 변수는 "주소"와 "값"이 함께 메모리에 할당된다고 했죠?

"값"을 참조하기 위해선 그 변수의 "주소"로 찾아가서 참조할 수 있다고 했구요

 

그럼 위는 이렇게 해석이 가능 하겠군요.

i라는 "주소"로 찾아가 그 주소의 "값"에

j라는 "주소"로 찾아가 그 주소의 "값"을 대입 시킨다.

 

다시 말하면 i라는 주소의 값에 j의 주소의 값을 대입 시킨다.

이렇게 해석하는 겁니다!

 

너무 길게 설명했네요 너무너무 간단한걸..

내용을 요약해서 가장 중요한걸 찝으라면 이겁니다

모든 변수는 메모리에 "주소"로 할당되고

이 변수를 참조할때에는 그 "메모리주소"를 찾아가 참조한다

 

 

다음 시간에는 본격적으로 포인터에 대해 알아볼겁니다

포인터는 변수가 메모리에 할당되는것과는 좀 달라요

근본적으론 같지만.. 왜 다른지 다음 시간에 알아보도록 하고 우선은 여기까지

저의 하드용량과 성능이 뻗기 시작하였네요..^^*

반응형

'[개발] DataBase Tool SAP' 카테고리의 다른 글

윈도우11 날짜 간 표시 해결 방법  (0) 2024.09.24
포인트 그 두번쨰.  (0) 2021.10.18
서버_정기점검_리스트 방법  (0) 2020.06.04
테이블 설계 양식  (0) 2020.06.02
전산용어 정리  (0) 2020.05.29

+ Recent posts