관심쟁이 영호

[C언어기초 #5.1] 포인터가 무엇일까?ㅣ포인터첫걸음, 기초 본문

학교공부/C언어의 왕!

[C언어기초 #5.1] 포인터가 무엇일까?ㅣ포인터첫걸음, 기초

관심쟁이 영호 2020. 2. 25. 22:23
반응형

안녕하세요.

최고왕입니다.

 

코로나바이러스가 한국 전역에 퍼져버렸네요..

정말 큰일이에요ㅠ

제발 잘 풀려서 모든 사람들이 웃고 다니던 그때로 빨리 돌아가고 싶어요..

 


오늘은 포인터에 대해서 공부를 할 겁니다!

 

포인터는 

C언어의 최대 무기이자

최고의 장점이에요!

 

포인터가 무엇일까?

데이터 구조의 항목 A가 다른 항목 B의 어드레스를 보유하고 있을 때 A를 B의 포인터라고 한다.

(네이버 지식백과)

 

네이버 지식백과에서 이렇게 설명하네요!

 

최고왕이 조금 더 풀어쓰자면

 

포인터는 변수가 저장되어있는 메모리 상의 주소를 저장하는 것을 의미해요!

그쪽 포인트를 찍어 표현한다는 뜻이라고 생각하면 될 거 같아요!

 

 

 

먼저 a라는 변수에 100이라는 정수를 초기화해주었어요.

이것을 시각화해보자면!

그럼 컴퓨터는 메모리상에 변수 a자리를 만들었을 것이고

그 자리는 주솟값이 있습니다.

주소 값은 실제로 보면 다르지만 제가 0x100 (16진수)으로 주솟값을 표현했어요.

여기서 포인터를 사용해볼게요!

 

여기서 처음 보는 연산자들을 보셨을 거예요.

이건 일단 좀 있다가 설명드릴게요!

 

자 이렇게 했을 때 컴퓨터는 어떻게 받아들였을지부터 보시죠!

컴퓨터는 이렇게 받아들였을 겁니다!

 

그럼 앞에서 나온 연산자를 알아보도록해요!

 

 

포인터를 어떻게 사용해야 할까?

포인터는 포인터 연산자가 따로 존재합니다.

포인터 연산자는

*(asterisk) 이것과

&(ampersand)를 사용해요! 각각 해당하는 뜻을 알아보도록 하죠!

 

먼저

여기서의 &a는

a변수의 주솟값을 부르는 연산자예요!

 

여기서 b라는 변수에다가 a의 주솟값을 저장하는 겁니다!

그럼 *(asterisk)는 무엇일까요?

 

조금 보기 편하게 더 풀어서 써드릴게요!

 

a = 100을 저장

b = a의 주솟값을 저장

*b = a의 주솟값 속으로 들어갔을 때 나오는 값 -> 결국엔 100

 

*(asterisk)를 b변수 앞에 붙이게 된다면 b가 가지고 있는 값인 주솟값으로 찾아가서 나오는 값을 뜻하게 됩니다!

 

이렇게 이해해주시면 됩니다!

 

이해하셨을까요??

혹시나

그림으로 표현해드릴게요 ㅎㅎ

 

 

보시기 편하게 그림으로 시각화했는데

이해하셨을까 모르겠어요..

 

그럼 실제 코딩으로 a의 값을 확인해볼게요!

 

먼저 코딩 화면부터 보시죠.

그럼 출력 창을 보시겠습니다!

 

이렇게 나오네요!

아까의 0x100은 제가 임의로 매겨준 주솟값이고

실제로 컴퓨터에 저장된 주솟값이 나왔어요!

 

a에는 100의 정수 값을 초기화해서 100이라는 정수가 출력되었습니다.

 

&a는 a의 주솟값을 출력하는 것이어서 a변수가 저장된 주소가 출력되었습니다.

 

b는 a의 주솟값이 저장되어 있기 때문에 a의 주솟값이 출력되었습니다.

 

*b는 b에 저장된 주솟값에 접근해서 나오는 값을 출력하였습니다. a의 주솟값이니 a의 값인 100이 출력되었습니다.

 

&b는 a의 주솟값을 저장해놓은 b변수의 주솟값을 출력하는 것이기 때문에 b의 주솟값을 출력하였습니다.

 

이해가 좀 가시는가요~?

 

저도 처음에 포인터 공부를 했을 때 이게 무슨 말장난일까..

라는 생각을 엄청나게 했는데요 ㅠㅠ

계속 보다 보면 이해가 되실 거예요!

 

포인터를 사용하는 이유가 무엇일까?

여기에 해당하는 내용은 아주 긴 이야기가 될 것 같아요 ㅠㅠ

 

그래서 여러분들께 간단하게 설명해드리고

다음 시간에 본격적으로 설명드릴게요!

 

포인터를 사용하는 이유는

주솟값으로 해당값에 접근할 수 있다는 장점이 있어요!

주솟값으로 접근을 한다는 뜻은

 

큰 데이터를 받았을 때 그것을 전부 전달받을 필요 없이

하나의 주소만 받아놓으면

큰 데이터를 전부 전달 안 받고 간편하게 주소 값만 알아두어도 되기 때문에

연산속도가 현저하게 빠르기 때문이죠!

 

이것을 제외하고도 많은 이유가 있는데

그건 다음 시간에 설명드릴게요!

 

오늘은 여기까지만 공부하겠습니다.

다음 시간엔 포인터를 이용해서 실제값을 조작해보고

포인터에 대해서 상세히 공부해보겠습니다.

 


오늘 포인터 공부가 이해가 잘되셨을까요~?

제가 말주변이 없어서 그런지

글 솜씨도 엄청 안 좋은 것 같아요..

 

이해하셨다면 읽어주신 분들이 정말 머리가 비상한 걸로 예상이 되네요!!

하지만 앞으로 글을 잘 쓰기 위해 공부를 더하고

더 열심히 글을 쓰겠습니다. ㅎㅎ

 

아!!

혹시나 이해 안 되는 부분이 있으시거나

틀린 부분이 있다면 언제든지 댓글로 말씀 주시면 감사하겠습니다 ㅎㅎ

 

항상 최선을 다하는 최고왕이 되겠습니다.

긴 글 읽어주셔서 진심으로 감사드립니다.

 

 

 

 

 

 

300x250
Comments