포인터가 초보자들에게 가르칠만한 개념이 아니거든요....-_-
기본적으로 CPU에서 메모리 접근을 어떻게 하는지, 또 OS에서 프로그램에게 메모리를 어떻게 할당하는지 이해하고
힙 영역과 데이터 영역과 코드영역이 어떻게 구분되는지 알아야지 포인터라는게 어떻게 작동하는지 정확히 이해할 수 있고
그래야 포인터 사용중 발생한 논리적 오류들이 왜 발생했는지 원인을 올바르게 추측하고 디버깅이 가능한데
이정도의 컴퓨터공학적 소양이 없는 사람이 무턱대고 C를 배우기에는 C언어, 특히 포인터는 너무 어려운 개념이라고 생각합니다.
대부분의 대학이 C를 첫 언어로 가르치는 이유는 교수들이 그 언어가 제일 익숙한 것도 있겠지만
차후에 공학적 지식을 쌓아 나가다보면 C의 동작이 컴퓨터의 원리와 구조가 맞물리며 이해가 가는 경우가 많기 때문이라고 봅니다.
즉, 본격적으로 컴퓨터공학을 깊게 배울 사람이 아니라면 C언어는 필요 이상으로 어려운 언어라고 봅니다.
컴퓨터 공학에 대한 공부 없이 C만 1년을 배운들 printf같은 함수가 다수의 인자를 받아들일 때
이게 메모리상에서 어떻게 적재되고 어떻게 동작하는지 이해할 수 있는 사람이 얼마나 될까요, 결코 많지는 않으리라 봅니다.
(언어를 배우는게 단순히 사용법만 배우는 걸로 충분하다면 상관 없겠지만, 그래서야 코더 이상 되기는 힘들겠죠)
그래서인지 최근에는 다른 언어를 첫 언어로 가르치는 대학도 늘어나는 추세 같더라구요...
사실, 어려운 걸로 따지면 C++도 풀 썰은 많습니다
리누스 토발즈가 C++은 제대로 다룰 수 있는 개발자가 너무 적다며 리눅스 커널 개발에서 C++을 제외하고 C만 쓰기로 한 일화도 있죠
(그래서 리눅스 커널은 아직도 C로만 작성됩니다.)
아무튼 틈틈히 여러가지 썰을 풀 여유가 있으면 좋겠네요