2012-12-19 2 views
2

제목에서 알 수 있듯이 C에서 함수 포인터를 어떻게 사용합니까? 함수 이름의 주소를 가져 와서 다른 함수로 전달할 수 있습니까? 그런 다음 그것을 역 참조하고 부르십시오.C에서 함수 포인터를 사용하는 방법은 무엇입니까? (No C++)

고마워요.

+1

예 ........................ 좋은 소리 –

+0

..... 희망이 도움이 있지만, 그것은 것 같다 스스로 시도해 보는 것이 가장 좋을 것입니다. 그런 다음 문제가 생길 경우 특정 문제로 저희에게 오십시오. –

+0

함수 포인터를 사용하여 SO 또는 Google을 검색하여 찾을 수 없다는 사실에 정말 놀랐습니다 ... – Mike

답변

8

기능 주소를 알고 있다면 예.

int add(int a, int b) 
{ 
    return a + b; 
} 

int sub(int a, int b) 
{ 
    return a - b; 
} 

int operation(int (*op)(int, int), int a, int b) 
{ 
    return op(a, b); 
} 

그럼 그냥 같이 호출 :

printf("%d\n", operation(&add, 5, 3)); // 8 
printf("%d\n", operation(&sub, 5, 3)); // 2 

당신은 어떤 배열 트릭을 수행 할 수 있습니다 예를 들어

int op = 0; 
int (*my_pointer[2])(int, int) = 
{ 
    add, // op = 0 for add 
    sub // op = 1 for sub 
}; 
printf("%d\n", my_pointer[op](8, 2)); // 10 
+1

함수를 전달할 때 실제로 & amp; 함수 이름 자체는 함수 포인터처럼 작동 할 수 있습니다. –

1

정확하게 귀하의 질문에 대답하기는 조항이있다 "함수 포인터"과 같은 필요에 따라 C에서.

그러나 특정 규칙을 준수해야

1) 모든 함수는이 같은 반환 형식이 있어야합니다 함수 포인터를 사용하여 전화를 걸. 2) 함수 포인터를 사용하여 호출하려는 모든 함수에는 동일한 인수 및 인수 유형이 있어야합니다.

예 :

int add (int, int); int sub (int, int); 만약 같은 함수 포인터를 작성할 수 위의 두 기능

,

INT (* 동작) (INT, INT);

으로 표시되며 Flavio Torbio과 같이 사용할 수 있습니다.

관련 문제