2013-07-16 3 views
1

한 권의 책에서 나는 다음 질문을 발견했습니다. 내가 직면 한 문제는 함수 포인터 란 무엇입니까? 어떻게 작동하며 선언문의 구문은 무엇입니까?함수 포인터 C에서 오류가 발생했습니다

주어진 코드에서 오류를 지적하십시오.

main() 
{ 
    int (*p)()=fun; 
    (*p)(); 
} 
fun() 
{ 
    printf("Hi.."); 
} 

내 첫 번째 질문은 다음 코드 스 니펫은 무엇을 의미합니까?

int (*p)()=fun; 
(*p)(); 

두 번째 명백한 질문 주어진 코드의 오류는 무엇입니까? ?? 그 솔루션 manual..thnx에 작성된

솔루션에 대한 ionela.voinescu의 대답을 참조하십시오 .. 그것은

+4

거의 모든 코드가 잘못되었습니다. –

+1

왜 명시 적으로 C와 관련된 질문에 C++ – nijansen

+1

태그를 지정 하시겠습니까? [답변] (http://stackoverflow.com/questions/840501/how-do-function-pointers-in-c-work). – nouney

답변

5

int (*p)() = funint을 반환하는 함수에 대한 포인터를 선언 한 다음 함수의 주소 인 fun을 해당 포인터에 할당합니다. (*p)()p이 가리키는 기능을 호출합니다. 코드와

문제 :

  1. funmain는 반환 형식이 있어야합니다. 컴파일러가 요구하지 않고 int을 반환한다고 가정하지만 컴파일러는이를 제공해야합니다.

  2. 당신은 mainfun를 선언, 또는이 prototype

또한, (*p)()가 불필요 사용할 필요가; 당신은 단지 p()을 사용할 수 있습니다.

IntFunc p = fun; 
p(); 
+2

C 표준에서 인수는 (void)로 표시되지 않으며,()는 지정되지 않은 인수의 개수를 의미합니다. – linkdd

+0

@linkdd 수정 해 주셔서 감사합니다. 그것은 C++ 개발자가 C 질문에 대답 할 때 일어납니다. –

+0

@ slavik262 NP, 또 다른 수정 : 이전 K & R에서는 반환 유형이없는 함수가 int를 반환하는 것으로 간주됩니다. – linkdd

1

재미가 함수 자체의 이름이 동일합니다.

int (*p)() 

은 'int a'와 같은 함수 포인터의 정의가 정수의 정의입니다.

int *는 포인터 자체이며,()는 함수에 대한 포인터임을 나타냅니다.

(*p)(); 

, 즉 P는 (* P) ​​() 따라서, 포인터 (P)의 함유량을 호출하여 실행하는 기능 재미에 할당 함수 포인터 (P)의 기능의 실행이고;

+0

-thnx 당신의 도움을 .. plz 날 ryt 개념을 가지고 있는지 확인하십시오 .. int (* p)(); 함수 포인터의 선언입니다. int (* p)() = fun ..을 작성하여 함수 defination의 첫 번째 문장의 주소를 포인터 p에 할당하고 다음 statment (* p)()에 함수 포인터의 첫 번째 statmnet 함수 포인터를 사용하여 함수를 실행 ... plz 말해줘 .. 만약 내가 정확 .. 그리고 이것은 당신이 나를 설명하고 싶었던 무엇입니까 ??? ??? – DD24

+0

@ DD24 필자는 함수 포인터가 함수의 첫 번째 문장을 가리킬 것이라고 생각하지 않습니다. 이 링크는 http://stackoverflow.com/questions/597292/where-exactly-do-function-pointers-point에서 어느 정도 도움이 될 수 있습니다. 구체적인 해결책을 찾지 못하면 별도의 질문으로 게시 할 수 있습니다. – VoidPointer

+0

Michel -thnx bro .. 링크가 도움이되었습니다 ... thnx 많이 – DD24

4
: 함수 포인터 구문은 상대적으로 추악한 때문에 보조 노트로

은, 당신이 너무 좋아 p를 선언하고 사용할 수 있도록 것이다

typedef int(*IntFunc)(); 

등의 형식 정의를보고 매우 일반적입니다

올바른 코드는 다음과 같습니다.

#include <stdio.h> 

int fun(); 
int main(){ 
    int (*p)()=fun; 
    (*p)(); 
    return 0; 
} 

int fun(){ 
    printf("Hi.."); 
    return 0; 
} 

1.
int fun(); main에서 사용하기 전에 함수를 선언해야합니다. 그렇지 않으면 main은 인식하지 못합니다.
2
int (*p)() : int 복귀하고 인자 (또는 인자의 정의되지 않은 수의 표준에 따라)을 갖지 않는 기능에 대한 포인터 변수 선언 p. 또한 int을 반환해야 fun이 위해서는

int fun(); 
......... 
int (*p)()=fun; 

3.


작동합니다. 의미는 변수에 값을 할당 할 때 변수의 선언에 해당하는 유형을 가져야합니다. int을 반환하는 함수에 대한 포인터에 값을 할당하고 인수가없는 경우 함수는 int을 반환해야하며 인수가 없거나 표준에 따라 인수가 정의되지 않았습니다.
4.
(*p)();
는 이제 fun를 가리키는 기능 p를 호출합니다.

+0

+1을 포함하여 +1 헤더를 포함합니다. – doctorlove

+0

아 - 사용하기 전에 함수를 선언하고 싶습니다. 이게 무슨 책 이니? – doctorlove

+0

Yeshwant Kanetkar가 C 기술을 테스트하십시오. – DD24

관련 문제