2014-10-25 4 views
4

내 강사가 함수를 다른 함수의 매개 변수로 사용했습니다. (나는 포인터를 사용하는 것이 아닙니다. 아래에 나와 있습니다.) 그가 한 일을 이해하지 못합니다. 아무도 예제로 설명 할 수 있습니까? 모든 감사의 답변을 주셔서 감사합니다.포인터없이 함수에서 사용하는 함수 프로토 타입

사용하는 스타일은 다음과 같습니다

int test(double abc(double)){ 
    // bla bla 
} 

기능은 다음과 같습니다

double abc(double n){ 
// function main 
} 

예제는 나는 그들이 맞아 너무 확실하지 않다 내게로 기록됩니다.

+0

내 C++ 응답을 잊어 버리면 방금 C에 대해 묻는 것을 깨달았습니다. –

+0

제시 한 코드 줄은 다음을 수행합니다. 함수 abc()가 호출되었습니다. 그것은 double 유형의 매개 변수를가집니다. (abc() 함수에서 반환 된 값을 명시 할 필요가 없습니다. 왜냐하면 abc() 함수와 abc 함수의 프로토 타입에 이미 정보가 명시되어 있기 때문입니다. abc() 함수는 단지 그 라인을 포함하지 않았을 것으로 기대하고 있기 때문에 test() 함수는 double 타입의 매개 변수를 기대하고 있습니다 .. 참고 : 나는 test() 함수의 프로토 타입을 보지 못합니다. jsut에 해당 행이 없습니다. – user3629249

+0

코드 결과는 abc() 함수에 대한 내장 호출의 반환 값에서 test() 함수의 매개 변수를 가져 오는 중입니다. – user3629249

답변

-1

포인터를 사용하는 경우 나중에 함수 테스트에서 함수를 호출 할 수 있습니다. 당신이 테스트를 호출하기 전에 함수를 호출 할 경우

typedef double (*func_type)(double); 

int test(func_type func) { 
// bla bla 
    cout << func(3); 
} 

// 2 call 
test(double_func) 

, 그럼 그냥 정의 :

int test(double) { 
// bla bla 
    cout << double; 
} 

// 2 call 
test(double_fun(2.0)); 

올바른 선택은 당신의 의도에 따라

+0

FYI, 질문에 태그가 지정되어 있지 않습니다. C 않습니다. C++. –

+0

이것은 실제 질문에 대답하지 않습니다 .OP는 포인터를 사용하지 않고 함수를 다른 함수에 전달하는 것에 대해 질문했습니다. 두 예제 모두 포인터를 암시 적으로 사용합니다. –

4

이 함수 선언 :

int test(double abc(double)) 
{ 
    // bla bla 
} 

다음과 같습니다 :

int test(double (*abc)(double)) 
{ 
    // bla bla 
} 

abc 매개 변수는 함수 포인터 유형 (double (*)(double)))의 매개 변수입니다.

C 표준 참고로

:

(C99, 6.7.5.3p8) "타입을 반환하는 함수 형태를 돌려 작동하는 포인터"조정한다 ","와 같은 변수의 선언 "6.3 에서처럼 2.1. "