C语言高级内容回顾——函数指针

1.函数指针基本概念:

程序运行期间,每个函数都会占用一段连续的内存空间,而函数名就是该函数所占内存区域的起始地址,我们可以将函数的起始地址赋给一个指针变量,使该指针变量指向该函数,然后通过该指针变量便可以调用这个函数。这种指向函数的指针变量称为函数指针。

2.函数指针定义形式:

 类型名(*指针变量名)(参数类型1, 参数类型2,...);

例如:

void (*pf)(int, char);

3.使用方法

只能用原型匹配函数的名字给一个函数指针赋值,例如:

#include <stdio.h>
void PrintMin(int a, int b){
    if(a < b)
        printf("%d", a);
    esle
        printf("%d", b);
}

int main(){
    void (*pf)(int, int);
    int x = 3, y = 4;
    pf = PrintMin;
    pf(x, y);
    return 0;
}

4.用途

函数指针可以用于调用用户自己定义的函数来完成库函数的使用,例如qsort库函数。

qsort()的原型为:

void qsort(void* base, int nelen, unsigned int width, int (*pfCompare)(const void*, const void*));

 举例对字符串长度从小到大进行排序:

#include <stdio.h>
#include <stdlib.h>

int compare(const void* str1, const void* str2){
	char* s1 = (char*)str1;
	char* s2 = (char*)str2;
	int num1 = 0;
	int num2 = 0;
	while (*s1){
		s1++;
		num1++;
	}
	while (*s2){
		s2++;
		num2++;
	}
	//printf("%d,%d,%d\n", num1, num2, num1 - num2);
	return num1 - num2;
}

int main(){
	char str[3][10] = { "green", "yellow", "red" };

	qsort(str, 3, 10, compare);

	for (int i = 0; i < 3; i++)
		printf("%s\n", str[i]);

	return 0;
}

输出结果为:

猜你喜欢

转载自blog.csdn.net/qq_21368481/article/details/85388849