函数指针

 是一个指针,指向函数的指针,指针存放的都是地址,所以函数指针存放的是函数的地址。数组名就是数组的首地址,函数名就是函数的首地址。与数组类似。

代码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;
}
函数指针 demo

相关文章:

  • 2021-11-30
  • 2021-11-11
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-10-25
  • 2022-12-23
  • 2022-12-23
  • 2021-09-19
  • 2022-12-23
  • 2021-02-24
  • 2021-08-04
相关资源
相似解决方案