C语言使用函数指针

下面是使用函数指针的一个简单示例,其中函数接受一个整数参数并返回一个整数。我们也定义了square函数,对一个整数求平方并返回值。为了简化例子,假定整数不会溢出。

int (*fptr1)(int);

int square(int num) {
    return num*num;
}

要用函数指针来调用square函数,需要把square函数的地址赋给函数指针,如下所示。就像数组名字一样,我们用的是函数本身的名字,它会返回函数的地址。我们还声明了一个整数并将其传递给函数:

int n = 5;
fptr1 = square;
printf("%d squared is %d\n",n, fptr1(n));

执行代码后会显示”5 squared is 25.“。我们也可以像下面那样用取地址操作符对函数名进行操作,但是没必要这么做。在这种上下文环境中编译器会忽略取地址操作符。

fptr1 = □

下图说明了本例的内存分配。我们把square函数放在程序栈下方。这只是举例子,实际上函数会被分配在跟程序栈所用段不同的段上。函数的实际地址通常对我们没用。

函数的位置

为函数指针声明一个类型定义会比较方便,下面说明对于之前用到的函数指针应该怎么做。类型定义看起来有点奇怪,通常,类型定义的名字是声明的最后一个元素。

typedef int (*funcptr)(int);

...

funcptr fptr2;
fptr2 = square;
printf("%d squared is %d\n",n, fptr2(n));

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程