유머천국 코하비닷컴
https://cohabe.com/sisa/4323534

C언어 포인터의 극의 (쉬움)


img/25/02/09/194e9c09f701bbf06.jpg
C언어는 그렇게 어렵지 않다:


void (*(*f[])()) ();


void형을 반환하는 함수에 대한 포인터를 반환하는 함수의 포인터로 이루어진 배열f의 정의다.



--------------------------



해설:


포인터란?

포인터는 컴퓨터 메모리의 특정 위치를 나타내는 값임


그리고 프로그램의 함수들도 실제로 메모리의 위치를 가진다(폰노이만구조 검색)


때문에 C언어는 함수또한 포인터로 나타낼수 있음

사실 C언어에서 함수의 이름은 메모리의 주소이기도 한데 알 필요는 없고...



img/25/02/09/194e9d0cd331bbf06.png

(IDE 키기 귀찮아서 온라인 컴파일러 쓸거임)


위와 같이 함수가 있을때



img/25/02/09/194e9d12a541bbf06.png



위와 같은 형태로 함수의 포인터를 선언해서 사용할 수 있다




img/25/02/09/194e9d1b4ae1bbf06.png



그런데 저 포인터 식을 그대로 쓰면 복잡하니 typedef로 간단하게 쓰겠다


위 코드에서 pf는 반환값과 인자가 없는 함수(void A()꼴)를 가리키는 포인터 타입이다



img/25/02/09/194e9d2c3211bbf06.png



이때 pf를 반환하는 함수를 만들수도 있다




img/25/02/09/194e9d304bc1bbf06.png



물론 pf를 반환하는 함수에 대한 포인터(ppf)를 만들수도 있다




img/25/02/09/194e9d344fd1bbf06.png



또 해당 포인터(ppf)의 배열을 만들수도 있다



이때 위의 코드를 간단하게 만들기 위해서 사용했던 typedef를 제거하면




img/25/02/09/194e9d40b001bbf06.png



위와 같이 이미지의 "그 코드"가 나오고




img/25/02/09/194e9d451ff1bbf06.png



정상 작동한다!



----------------------------



ps1. 물론 실제로 저딴 코드를 쓸일은 거의 없으니 안심하고 공부하세요 초심자 여러분!


ps2. 근데 저는 C언어로 코딩 안하고 C++ 씁니다


ps3. 이미지는 퍼온거지만 해설 달아서 자작유머

댓글

  • 나의이름
    2025/02/09 17:33

    몰라 난 그냥 람다로 씌워서 펑션포인터 쓸거야 무서워

    (7VQTJo)


  • Medand
    2025/02/09 17:34

    에.. 저는 파이썬 쓸게요

    (7VQTJo)


  • 냐옹쿠키
    2025/02/09 17:39

    저 포인터가 되게 좋은건 맞는데, 문제는 회사에서 코딩을 혼자하는게 아니라는거지.
    주석달아도 추적하기 ↗같아서 그 회사에 평생충성할거 아니면 안쓰는게 맞음.

    (7VQTJo)


  • 니라민
    2025/02/09 17:46

    예 저는 자바나 쓸게요.

    (7VQTJo)


  • 새벽늑대
    2025/02/09 17:48

    하이레벨 언어일수록 쓰기 쉽다.
    하지만 로우레벨일수록 연봉이 올라간다는 이야기가 있다.

    (7VQTJo)

(7VQTJo)