就像指针可以指向一般变量、数组、结构体那样,指针也可以指向函数。
函数指针的主要用途是向其他函数传递“回调”,或者模拟类和对象。
形式如下:
int (*POINTER_NAME)(int a, int b)
这类似于指向数组的指针可以表示所指向的数组。指向函数的指针也可以用作表示所指向的函数,只不过是不同的名字。
- int (*tester)(int a, int b) = sorted_order;
- printf("TEST: %d is same as %d\n", tester(2, 3), sorted_order(2, 3));
使用typedef
可以给其它更复杂的类型起个新的名字。你需要记住的事情是,将typedef
添加到相同的指针语法之前,然后你就可以将那个名字用作类型了。
- #include
- #include
-
-
- typedef int (*compare_cb)(int a, int b);
-
- /**
- * A classic bubble sort function that uses the
- * compare_cb to do the sorting.
- */
-
- int *bubble_sort(int *numbers, int count, compare_cb cmp)
- {
- int temp = 0;
- int i = 0;
- int j = 0;
- int *target = malloc(count * sizeof(int));
-
- memcpy(target, numbers, count * sizeof(int));
-
- for(i = 0; i < count; i++) {
- for(j = 0; j < count - 1; j++) {
- if(cmp(target[j], target[j+1]) > 0) {
- temp = target[j+1];
- target[j+1] = target[j];
- target[j] = temp;
- }
- }
- }
-
- return target;
- }
-
- int sorted_order(int a, int b)
- {
- return a - b;
- }
-
- int reverse_order(int a, int b)
- {
- return b - a;
- }
-
-
- void test_sorting(int *numbers, int count, compare_cb cmp)
- {
- int i = 0;
- int *sorted = bubble_sort(numbers, count, cmp);
- for(i = 0; i < count; i++) {
- printf("%d ", sorted[i]);
- }
- printf("\n");
-
- free(sorted);
- }
-
-