1년간 고민에 고민을 한 끝에 도달한 c언어 포인터 이해

업자(業者)가 아니면 손발머리가 다 고생하네요, 파이썬을 하다가 리스트나 변수에 값을 입력하는것들이
거침없이 막 되기에 심지어 자료형 선언도 안해도 되구여, 그래서 우째서 이렇게 파이썬은 쉽게 쉽게 가는걸까
생각하다보니깐 이것이 C언어에서 이야기하는 포인터가 아닐까 생각해봤습니다…

그라설라무네… 파이썬은 밑바닥 공구리가 아주 정교하게 다져진 포인터 덩어리라는데까지 생각이 도달했던거지요;;;

그래서 막연히 C언어에 대하여 잠깐씩 훓어보고 예문도 이맥스에다 일일이 적어서 gcc 로 컴파일하여 값들이 어떻게 변하나 보면서,
저 나름대로 이해한 포인터입니다.

예제코드 소스보기: 포인터 예제 -- 규리/수아/엄마 (eab6b696) · Commits · ^고맙습니다 _布德天下_ 감사합니다_^))// / test · GitLab

배경 설명을 하면…
뱃속에 딸이 있는데,
딸에게 영양분(음식)을 전달하려 할때 포인터를 활용하지 않을까였습니다!

큰딸 = &엄마
엄마 = 딸기3개먹기

그럼 큰딸이 딸기3개를 먹게 되는 효과?

포인터 이해하는 방법에 대해서 여러가지 인터넷에 설명들이 있지만
머리가 딸려서 정말 이해가 잘 안되었는데, 오늘 갑자기 문득 위 예제가 떠올라
실제 코딩해서 컴파일후 출력해보니깐, 딱 되더라구요…

지금까지 농사꾼스타일의 C언어 포인터 이해 였습니다~

꾸벅,

[우분투 18.04 파여폭스 나비에서 적었어유~~~]

그래서 데이타를 주고받을때 C언어에서는 포인터를 적극적으로 활용한다! 가 핵심인거 같아요.

예제 하나 더 추가해봅니다…

예제 소스코드: https://gitlab.com/soyeomul/test/-/commit/961dff4ab0d63e9cd289d6a0dc77a0d96a49deef

[크롬북에서 적었어요]
[우분투 18.04 파여폭스 나비에서 스크린샷을 올렸습니다]
Screenshot from 2021-01-27 20-28-41.png

오늘은 큰딸 규리가 엄마아빠 전 어떻게 태어났나요?
라고 물어봤씁니다… 우물쭈물하다가 음~~~;; 나중에 이야기해줘도 될까요? 우리공주?

하고 넘겼씁니다~~~

포인터로 큰딸 규리가 태어난 비밀을 한번 적어봤습니다,

소스코드 예제: https://gitlab.com/soyeomul/test/-/commit/c8cc270cc5e4890ac29fdf2d8462b98823c4474e

꾸벅,

[우분투 18.04 파여폭스 나비에서 적었어요~]
[우분투 18.04 파여폭스 나비에서 소스코드 주소를 갱신했습니다]
Screenshot from 2021-01-30 19-54-54.png

소스코드 예제: https://gitlab.com/soyeomul/test/-/blob/master/씹어먹는C언어/_swap.c

포인터 예제 하나 더 추가합니다 ;;;

[우분투 18.04 파여폭스 나비에서 적었어요~]
Screenshot from 2021-01-30 22-38-20.png

헤깔리는 문법 짚고 넘어갑니다…

int n = 3;
int *p = &n;

위의 문법은 아래처럼도 표현할 수 있습니다.

int n = 3;
int *p;
p = &n;

스크린샷에 전체 코드를 첨부합니다.

포인터 에서 지금까지 비전공자가 어려움을 느끼었던 부분은…
눈에 보이지 않는 주소값 의 인식이 잘 안되었던거 같아요… 저도 그렇고 대부분 파이썬만 해오셨던분들이
주소값을 의식하지 않고도 쉽게 파이썬 코딩이 가능했었기에…

C언어포인터가 전부이며,
그리고 포인터는 주소값의 인식 으로 표현하고 싶어요~
농사꾼스타일의 포인터 이해 이정도로 갈무리합니다.

좀 더 시간을 두고서 여유가 생길때 malloc 에 대해 새롭게 도전해보고자합니다…

꾸벅,

[우분투 18.04 파여폭스 나비에서 적었습니다]
Screenshot from 2021-01-31 12-29-57.jpg

평소 malloc포인터와 정말 연관이 깊다는 생각을 해왔습니다
그래서 적어봅니다…

malloc 은 메모리를 동적으로 할당하는거라고 합니다.
자원을 얼마나 쓸지 결정되지 않은 상태에서 그때그때 메모리를 적합하게 추가로 할당해주는겁니다.

위와 같은 상황에서 malloc 을 씁니다.
아 참 그리고 쓴 자원은 가능한한 메모리 해제를 해주어야 한다고 하네요.
어차피 뭐 프로그램이 종료되면 운영체제가 알아서 메모리 다 회수해가지만,
프로그램이 항시 떠있는 서비스 데몬이라면 메모리 해제는 정말 중요해질 수 있다는 생각이 드네유~~

예제 소스코드: 소수_식별/8.c · master · ^고맙습니다 _布德天下_ 감사합니다_^))// / test · GitLab
예제 소스코드 실험결과: https://gitlab.com/soyeomul/test/-/raw/master/소수_식별/result.8

꾸벅,

참고문헌: 동동동 메모리 동적할당(Dynamic Memory Allocation)

===> 씹어먹는 C 언어 - <20 - 1. 동동동 메모리 동적할당(Dynamic Memory Allocation)>

[우분투 18.04 파여폭스 나비에서 적었습니다~~~]


바로 위 코드 (8.c) 엔 한가지 부정확한 정보가 있습니다.

tlp 에 기반한 “배열 크기” 의 정의가 부정확합니다.

malloc_usable_size() 함수로 찍어보면,
아래처럼
매번 요청시마다 의도한값 4바이트 대신 항상 24바이트가 할당됩니다.
(ARM64 GNU/Linux 기준)

그래서 몇번 설계를 변경해보려 시도했으나, 비전공자 입장에선
참 어렵더이다… 그냥 소수들이 무사히 출력되는것에 만족하고

숙제로 남기고 싶네요,

이것으로 저의 포인터 이야기는 여기서 마칠께요~

꾸벅,

황병희 드림

참고문헌: malloc()으로 할당 받은 메모리의 크기를 아는 방법

===> malloc()으로 할당 받은 메모리의 크기를 아는 방법 | KLDP

[우분투 18.04 파여폭스 나비에서 적었어요~]