반응형
함수 포인터 - 자동 재참조
중복 가능:
함수 포인터의 참조 해제는 어떻게 이루어집니까?
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
반응형
'programing' 카테고리의 다른 글
AngularJS - 다른 파셜 내에서 파셜을 동적으로 사용 (0) | 2023.09.19 |
---|---|
카르마가 단위 테스트를 실행하지 않음 (0) | 2023.09.19 |
Docker 및 Vagrant를 통해 MariaDB를 설치할 수 없습니다. (0) | 2023.09.19 |
axios post request with json data (0) | 2023.09.19 |
WooCommerce - 랜덤 상품 보여주기 (0) | 2023.09.19 |