关于函数指针--简介

函数指针说白了,,,,函数的地址

现在看一个简单的--先定义一个函数指针

void (*f1)();就是这样定义--指向的是一个void类型的

假设定义了另一个 void f2();

可以 f1 = &f2 或者 f1=f2;

直接代码了

#include<stdio.h>
#include<stdlib.h>
void (*f1)(); 
void f2();

void main()
{
  f1=f2;

  (*f1)();
}
void f2()
{   
    printf("11111
");
}  

f1=f2;这个好理解--把f2的地址给了f1呗;
(*f1)();这一句,要想一下*f1中的*在想一想在普通指针中什么意思  取取取取取取  要想--哎呀*f1不就相当于f2吗  所以(*f1)();不就相当于f2();

看下一个

#include<stdio.h>
#include<stdlib.h>
void (*f1)(int x); 
void f2(int x);

void main()
{
  f1=f2;

  (*f1)(2);
}
void f2(int x)
{   
    printf("x=%d
",x);
}  

也没什么难的

void (*f1)(int x); 
void f2(int x);
不过好像这两个的类型要一样,,,现在都是无返回值的带int型的参数的函数

 再看下一个

#include<stdio.h>
#include<stdlib.h>
int (*f1)(int x); 
int f2(int x);

void main()
{
  f1=f2;

  (*f1)(2);
}
int f2(int x)
{   
    printf("x=%d
",x);
    return 0;//必须返回点东西,不然编译会报错
}  

 

运行结果和上面一样--理所当然



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

void f2();
void f3( void(*f4)() );
void main()
{
    f3(f2);
}
void f2()
{   
    printf("1111
");
}
void f3( void(*f4)() )  
{
    (*f4)();
}

其实感觉也没什么--和    void f3( *P ){a =*P }  一样的的道理

 
原文地址:https://www.cnblogs.com/yangfengwu/p/5730956.html