C린이들이 많이 착각들 하는게 포인터 문법이 난해하다고 포인터가 어렵다고 생각하는거다



C언어 경력자도 포인터 꼬아논 문제 보면 틀리는데, 그건 쓰라고 만든게 아니라 쓰면 안되는 코드를 문제로 내니깐 틀리는 거임.



자매품으로 연산자 우선순위 문제가 있음. 실전에서는 햇갈리면 무조건 괄호치는게 정석임.



어쨋든 포인터 문법 난해한건 다들 인정하고 그걸 해결할려고 C++에서 노력 많이 했음. 포인터 따위 상관없을 정도로 아주 괴물새끼긴 한데 아무튼,



C언어는 다중 포인터로 도배 할수밖에 없다면 define이나 함수등으로 최대한 래핑해서 짜고, 왠만하면 struct로 감쌈.



C언어로 짠 코드보면 강박적으로 assert 도배된 코드가 한두개가 아닌데 포인터 도배하기 시작했을때 프로그램 터지는건 디폴트 옵션이기 떄문이지.

그만큼 숙련자도 문법적 실수가 많다는 거고,



아무튼 포인터가 어려운 이유는, 메모리를 다루는거고 메모리는 컴퓨터 3대 구성요소 '한축'을 담당하는데 메모리를 학습 할려니까 어려운거임.



메모리 보호개념 그러니까 할당,해제,예약,매핑 등등 그리고 페이징, 세그멘테이션, 캐싱, 메모리 계층구조, 가상 메모리, 메모리풀 등등



세부적으로 들어가면 끝도 없는 개념들이 튀어 나오고 거기에 추상화도 많이 되어있어서 공부할 양도 많음. 물론 CS지식으로 분류 되긴함.

근데 사실상 C언어로밖에 접근 못하는게 현실임.



거기에 다중 스레드나 다중 프로세스로 접근이 필요로 할때, 메모리 관리를 C언어에서 어떻게 해야될지가 가장 실제로 많이들 어려워 하는 부분임.



포인터에서 메모리 개념 물어보면 보통 애들은 힙,스택 이런걸 말하는데 근본적으로 이건 알고리즘이고, 메모리 관리 계층구조에서는 최상위권에 위치함.



메모리 관리라는 하위 개념을 이해하는게 C언어 포인터(메모리)의 본질이고 다이렉트로 메모리에 접근하는 C언어의 최고 장점인데,



포인터 완벽하게 이해 했다는 친구들한테 그럼 니컴퓨터 2번 슬롯에 있는 램에서 0x123456 주소에 한번 뭐가 들어 있는지 접근 해봐 하면 못함.



꼴랑 내 프로세스 가상메모리 한구석에 접근 하는거 따위로는 포인터의 장점을 알기도 어렵고, C언어 포인터 써야할 의미도 별로 없음

(그정도 접근은 다른 언어들도 다 함)

(C언어 포인터 빨라서 쓴다는 놈은 그냥 창문 열고 뛰어 내리라)



C언어 문법 포인터 개념 자체는 초등학생도 2시간 잡고 알려주면 다 알아 처먹으니 개나소나 아는걸로 잘난척 하는것좀 그만좀 봤으면 좋겠음.