2017-04-04 1 views
1

나는이 프로그램이 나는군요에 함수 포인터를 할당합니다.어떻게 함수

int function_a(int j){ 
    return j+10; 
} 

int function_b(int j){ 
    return j; 
} 

void set_a(int (*function)(int)){ 
    function_a = function; 
} 

int main(){ 
    int a = function_a(2); 
    printf("%d, ", a); 

    set_a(function_b); 

    int b = function_a(2); 
    printf("%d", b); 
} 

나는 기능 set_afunction_bfunction_a을 설정합니다. 그래서 출력은 12, 2입니다. 이걸 올바르게 할당하려면 어떻게해야합니까?

+1

너의 문제? –

+1

@narusin 젠장, 그것은 내게 downvote 코멘트를하지 않습니다 :-( – George

답변

4

함수 정의를 대입으로 대체 할 수 없습니다. 즉, 함수 정의는 사용자가 할당 할 수있는 lvalue가 아니므로 오류가 발생합니다. 하지만 당신은 함수 포인터를 정의하고 다른 기능 정의를 할당하고, 그것이 일반적인 함수 정의의 의미에서 함수 인 것처럼 함수 포인터를 호출 할 수 있습니다 : 당신이 해결하려고 지금까지했던 어떤

int function_a(int j){ 
    return j+10; 
} 

int function_b(int j){ 
    return j; 
} 

int (*f)(int) = function_a; 

void set_a(int (*function)(int)){ 
    f = function; 
} 


int main(int argc, const char *argv[]) 
{ 

    int a = f(2); 
    printf("%d, ", a); 

    set_a(function_b); 

    int b = f(2); 
    printf("%d", b); 

    return 0; 
} 
관련 문제