programing

함수 포인터 - 자동 재참조

skycolor 2023. 9. 19. 20:57
반응형

함수 포인터 - 자동 재참조

중복 가능:
함수 포인터의 참조 해제는 어떻게 이루어집니까?

  void myprint(char* x) {
      printf("%s\n", x); 
  }

  int main() {
     char* s = "hello";
     void (*test)(char*);
     void (*test2)(char*);

     test = myprint;
     test2 = &myprint;

     test(s);
     (*test)(s);
     test2(s);
     (*test2)(s);

  }

위의 코드가 모두 유효한 이유를 설명해 줄 수 있는 사람이 있습니까?"hello"는 4번 인쇄됩니다.함수 포인터를 적용하면 암묵적으로 탈방어가 됩니까?기본적으로 함수 포인터가 실제로 어떻게 저장되는지 알고 싶습니다. 위 내용이 좀 헷갈리기 때문입니다.

이것은 단지 C의 장난일 뿐입니다.다른 이유는 없지만 C 표준은 재참조 또는 함수의 주소를 가져오는 것은 해당 함수에 대한 포인터로 평가하고, 재참조 기능 포인터는 해당 함수에 대한 포인터로 평가한다고 말합니다.

이러한 행동은 (따라서) 단 하나의 일이&그리고.*연산자는 정규 변수에 대해 작동합니다.

그렇게,

test2 = myprint;
test2 = &myprint;
test2 = *myprint;
test2 = **********myprint;

모든 것이 똑같이 하고, 당신에게 다음에 대한 함수 포인터를 제공합니다.myprint

유사하게,

test2(s);
(*test2)(s);
(***********test2)(s);

마찬가지로, 에 저장된 함수 포인터를 호출합니다.test2. C가 그러잖아요.

언급URL : https://stackoverflow.com/questions/7518815/function-pointer-automatic-dereferencing

반응형