2012-05-28 1 views
3

나는 다시 정렬하는 기능입니다 여기에fun()와 fun를 호출 할 때의 차이점은 무엇입니까?

qsort(array, 10, sizeof(int), sort);

다음과 같다 코드의 조각을 건너왔다. 하지만 나는 항상 함수 이름 뒤에 ()이 있어야하거나 불필요한 함수가 있어야한다고 생각하고있었습니다.

나는이 기능이 어떻게 작동하고 이러한 기능을 호출하는 차이점이 무엇인지 알고 싶었습니다. 감사! 기능 "를 qsort"이 함수를 호출 할 수 있도록

+0

나는 함수에 대한 포인터로 사용하고 있다고 생각한다 : http://www.newty.de/fpt/index.html – Eimantas

+0

qsort에서 함수를 호출하지 않고 "sort"함수의 주소를 전달한다. 그래서 qsort가 호출 할 수 있습니다. –

답변

2
qsort(array, 10, sizeof(int), sort); 

이 기능을 "종류"에 대한 포인터를 전달합니다.

+0

사실,'sort'는 실제로'& sort'의 짧은 형태입니다 - 컴파일러는 당신이 함수를 호출하지 않는다는 것을 보았습니다, 그래서 당신이 그것의 주소를 전달하려한다는 것만 이해할 수 있습니다. – Wormbo

1

qsort 함수를 비교 함수로 사용할 수 있도록 sort 함수에 대한 포인터를 qsort 함수에 전달하고 있습니다.

정확한 구문에는 sort 앞에 &이 있어야합니다 (sort은 포인터가 아니기 때문에 포인터가 아니기 때문에이를 참조해야합니다).하지만 컴파일러는이를 "추가"합니다.

1

당신이 (예를 들어, C 표준 단위) C 문법는 함수 호출 연산자입니다 ()로 작성된 운영자가 있다는 것을 발견 보면. 배열 첨자 연산자[]과 유사하며 식별자 (이 경우 함수 이름)에 적용됩니다. 함수 식별자가 함수 호출 연산자 뒤에 나오지 않으면 식별자는 해당 함수에 포인터 인 을 나타냅니다. 그래서 이제는 명확 해집니다. qsort의 마지막 인자는 : 비교 함수에 대한 포인터입니다. 두 요소를 비교할 필요가있을 때마다 마지막 arg가 가리키는 함수를 호출합니다.

당신의 예에서 sort 기능 (다른 인수 여러 번) 다시 호출 qsort콜백 기능을 불린다.

관련 문제