函数与指针分析1:函数类型
C语言中的函数有自己特定的类型
函数的类型由返回值, 参数类型和参数个数共同决定
- int add(int i, int j) 的类型为 int(int, int)
C语言中通过typedef为函数类型重命名
- typedef type name(parameter list)
例:
typedef int f(int, int); // 重命名
typedef void p(int); // 重命名
函数与指针分析2:函数指针
函数指针用于指向一个函数
函数名是执行函数体的入口地址
可以通过函数类型定义函数指针:FuncType* pointer;
也可以直接定义:type(*pointer)(parameter list);
注:
pointer 为**函数指针变量名
type 为所指函数的返回值类型
parameter list 为所指函数的参数类型
/* 测试代码 */
#include <stdio.h>
typedef int(FUNC)(int);
int test(int i)
{
return i * i;
}
void f()
{
printf("Call f()...\n");
}
int main()
{
FUNC* pt = test;
void(*pf)() = &f;
printf("pf = %p\n", pf);
printf("f = %p\n", f);
printf("&f = %p\n", &f);
pf();
(*pf)();
printf("Function pointer call: %d\n", pt(2));
return 0;
}
运行结果
pf = 004013BC
f = 004013BC
&f = 004013BC
Call f()...
Call f()...
Function pointer call: 4