C语言 函数指针定义三种方式

//函数指针
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//函数指针类型跟数组类型非常相似

//函数名就是函数的地址,函数的指针,对函数名进行&取地址操作,还是函数名本身,这是C语言编译器的特殊处理
void test(int a){
    printf("a=%d\n",a);
}

void ProtectA(){
    //定义函数类型
    typedef void(FunType)(int);
    FunType *ft = test;
    FunType *ft2 = &test;
    //这两种赋值方式的结果完全一样
    ft(1);
    ft2(2);

    //定义函数指针类型
    typedef void(*PFun)(int);
    PFun pf = test;
    pf(3);

    //定义函数指针变量
    void(*pf2)(int) = test;
    pf2(4);
}

void main(){
    ProtectA();
    system("pause");
}

时间: 2024-08-02 06:55:37

C语言 函数指针定义三种方式的相关文章

javascript函数命名的三种方式及区别

1, function fn(val1,val2) { alert(val1+val2); } fn(1,2); 2, var fn=function() { alert(val1+val2); } fn(1,2); 3, var fn=new Function("alert(val1+val2)"); fn(1,2); 上面三种方式逻辑上是等价的,但是还是有点小区别: 区别一:例一中的函数会在代码执行以前被加载到作用域中,而例二则是在代码执行到那一行的时候才会有定义: 区别二:函数声

es6编写reactjs事件处理函数绑定this三种方式

第一种:官方推荐的: class LoginControl extends React.Component { constructor(props) { super(props); this.handleLoginClick = this.handleLoginClick.bind(this); this.handleLogoutClick = this.handleLogoutClick.bind(this); this.state = {isLoggedIn: false}; } 第二种:比

js 函数定义三种方式

今天看到js原来有很多种定义的方式 var region = new Object();region.isAdmin = false;region.loadRegions = function(b, a, c) { Ajax.call(region.getFileName(), "type=" + a + "&target=" + c + "&parent=" + b, region.response, "GET&quo

第七章、函数基础之定义函数的三种方式03

目录 第七章.函数基础之定义函数的三种方式03 一.无参函数 二.有参函数 三.空函数 第七章.函数基础之定义函数的三种方式03 一.无参函数 定义函数时参数是函数体接收外部传值的一种媒介 在函数阶段括号没有参数就是无参函数.调用时不需要传入实参 如果函数体代码逻辑不需要依赖外部传入值,必须定义成无参函数 def func(): print('hello nick') func() # hello nick 二.有参函数 在函数阶段括号有参数就是有参函数.调用时需要传入实参 如果函数体代码逻辑需

const 指针的三种使用方式

///////////////////////const 指针的三种状态///////////////////// 注意:const 的前后顺序 const 在类型之前 ---可以修改指针包含的地址,不能修改指针指向的值 const 在变量之前类型之后 ---可以修改指针的指向值,不能修改指针地址 // 1.指针指向的数据为常量,不能修改,但是可以修改指针包含的地址 /*int HoursInDay = 24;const int* pInteger = &HoursInDay; cout<&

javascript中定义事件的三种方式

在javascript中,可以为某个元素指定事件,指定的方式有以下三种: 1.在html中,使用onclick属性 2.在javascript中,使用onclick属性 3.在javascipt中,使用addEvenListener()方法 三种方法的比较 (1)在第二.三种方法中,可以向函数传入一个event对象,并读取其相应属性,而方法一不可以. (2)首选第二.三种,第一种不利于将内容与事件分离,也不能使用event对象的相关内容. 一些语法细节 (1)在第一种方法中,onclick大小写

javascript创建函数的三种方式

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content=

异步回调函数-创建进程的三种方式

回调函数 有两个类,A,B,在类A中调用B,在B中调用A的方法完成A的工作,那么这个在B类中调用的A的函数就称为回调函数. 异步回掉函数:类A将自己的工作交给类B后,继续执行剩下的程序,而B继续完成A交给的工作. 使用方法: 1.定义一个接口 2.A可以直接继承此接口,也可以定义一个内部类继承此接口: 定义一个方法,调用B中的方法 3.B中的方法调用A中的方法. //定义接口 public interface doJob { public void fillBlank(int a,int b,i

可读性很强的C语言的函数指针定义

通常C/C++程序里面要用到大量的指针,其语法非常难以阅读.比如下面的vp指针类型: #include <iostream> using namespace std; typedef void (*vp) (float&,float&); void foo(float &a,float &b) { a = a + b; } int main() { // float a=1; float b=2; vp t=&foo; t(a,b); cout <