函数指针
是一个指针,指向函数的指针,指针存放的都是地址,所以函数指针存放的是函数的地址。数组名就是数组的首地址,函数名就是函数的首地址。与数组类似。
代码demo
int (*p) (int ,int ) = NULL; // int (*) (int ,int ) 这就是指针变量的类型 (除了函数名) p = maxValue; 指针变量存储的是函数的地址(函数名) // 定义一个有两个整形参数且返回为整型的函数指针
#import <Foundation/Foundation.h> // 求两个数字的最大值 // 函数的类型就是由 返回值类型 + 参数个数及类型 int maxValue(int , int ); int maxValue(int a , int b ){ return a > b ? a :b ; } int minValue(int ,int ); int minValue(int a, int b){ return a < b ? a : b; } //char getString(); 不能这样写 char *getString();//类型 char * 函数名 getString 返回值类型为 char * 而且没有参数的函数 char *getString(){ // char a[10] = "hello"; char *a = "hello"; return a; } void outputNumber(int a); // 类型 void () void outputNumber(int a){//void * 是一个泛型 返回泛型的指针 ??? printf("\noutputNumber 输出传入数字 %d\t",a); } // 定义一个函数求两个浮点数的和 float requireTwoFloatSum(float a, float b); float requireTwoFloatSum(float a, float b){ return a + b; } int main(int argc, const char * argv[]) { // 定义一个有两个整形参数且返回为整型的函数指针 int (*p) (int ,int ) = NULL; // int (*) (int ,int ) 这就是指针变量的类型 (除了函数名) p = maxValue; // 指针变量存储的是函数的地址(函数名) int value = p (20,30); printf("\nvalue = %d \t",value); int (*p0) (int , int ) = NULL; p0 = minValue; int min = p0(6 , 7); printf("\n min = %d\n",min); // 分别定义函数指针,来指向对应的函数,然后使用此指针实现函数的调用 // char (*p1) = NULL; // p1 = getString; char * str = getString();//没有参数小括号 不能省略 // 练习:分别定义函数指针,来指向对应的函数,然后使用此指针实现函数的调用 char *(*p1)() = NULL; //第二个 * 是标记 p1 是一个指针 p1的类型是char *(* )() printf("%s\t",str); // outputNumber 输出传入数字 int (*p2)(int) = NULL; p2 = outputNumber; p2(2); // 定义一个函数求两个浮点数的和 float (*p3)(float ,float) = NULL; p3 = requireTwoFloatSum; float a = p3(15.44,14.33); printf("\n定义一个函数求两个浮点数的和 %.2f",a); return 0; }
#import <Foundation/Foundation.h> // 定义一个函数求两个整数的和 int requireTwoSum(int a, int b); int requireTwoSum(int a, int b){ return a + b; } // 求两个数字的最大值 int maxValue(int , int ); int maxValue(int a , int b ){ return a > b ? a :b ; } // 求两个数字的最小值 int minValue(int ,int ); int minValue(int a, int b){ return a < b ? a : b; } //函数当成一个函数形参 typedef int (*FUNCTION)(int ,int); //如果这里不写 typedef 的话, typedef FUNCTION f;这句就要报错 ,typedef 只是为数据类型重命名 //这个 FUNCTION 可以指向任意一个 int (* )(int ,int) 这种类型的函数(上面的求和,求最大值,求最小值) typedef FUNCTION f; int getValue(int ,int ,f );//声明了一个可以传递函数的函数 int getValue(int a ,int b ,f f1 ){ int q = f1(a,b); return q; } int main(int argc, const char * argv[]) { int arr = getValue(4, 8, maxValue); printf("maxValue = %d\t",arr); int brr = getValue(23, 3, minValue); printf("minValue = % d\t",brr); int crr = getValue(29, 76, requireTwoSum); printf("TwoSum = %d\t",crr); return 0; }