C语言实现委托

需要用的指针函数。通过用指针函数作为地址接收函数地址,以达到委托其他函数实现某方法的目的。

以下贴代码

void function1(fun);
void function2();
void function3();
typedef void(* fun)();  //typedef 把void(*)()类型重命名为fun
int main()
{
    function1(function2);
    fun f = function3;
    f();
    function1(function2);
    function1(function3);
    getchar();
    return 0;
}
void function1(fun f)  //fun f为地址,fun * f为f指向的地址的量或者其他
{
    printf("function1\n");
    if (f != NULL)
    {
        f();
    }
}
void function2()
{
    printf("function2\n");
}
void function3()
{
    printf("function3\n");
}

//使用警告!!!!
//function1(function1);是严禁这么做的,否则会造成访问冲突!
//切勿free()!!!
时间: 04-11

C语言实现委托的相关文章

C#语言-05.委托和事件

a. 委托:是一种定义方法签名的类型,可以与具有兼容签名的任何方法关联.所谓兼容的方法,是指这个方法和委托的方法签名具有相同的返回类型和参数 i. 语法:delegate 方法签名; 1. 方法签名是方法的名字,没有方法体 ii. 使用委托的过程 1. 定义委托和委托对象 2. 编写要委托的方法 3. 将要委托的方法传递给委托对象 4. 使用委托调用委托方法 iii. 多播委托:是将多个与委托有相同方法签名的方法绑定到同一个方法上 1. 使用多播委托要求方法返回类型为 void. 2. 用"+=

C++:关于委托类

转自:http://blog.csdn.net/dadalan/article/details/4041931.vs2010已经支持function/bind,能很好实现委托. [说明] 本文不仅介绍了C++语言应用非常好的一种方法(我甚至觉得应该将它归结为一种设计模式),而且也是对C#语言中委托特性底层实现的一个很好的说明. 阅读本文,你应当对委托的概念有所了解:在讨论委托是实现时,你应当对标准模板库(STL)中的list容器以及迭代器(iterator)有所了解. 在这篇文章中,暂不讨论类成

匹夫细说C#:庖丁解牛聊委托,那些编译器藏的和U3D给的

0x00 前言 由于工作繁忙所以距离上一篇博客已经过去一个多月的时间了,因此决心这个周末无论如何也得写点东西出来,既是总结也是分享.那么本文主要的内容集中在了委托的使用以及内部结构(当然还有事件了,但是受制于篇幅故分为两篇文章)以及结合一部分Unity3D的设计思考.当然由于时间仓促,文中难免有一些疏漏和不准确,也欢迎各位指出,共同进步. 0x01 从观察者模式说起 在设计模式中,有一种我们常常会用到的设计模式——观察者模式.那么这种设计模式和我们的主题“如何在Unity3D中使用委托”有什么关

C#语言进阶——4.C# 的委托

1.C# 中通过委托调用静态方法 简述: 委托就像c++里面的函数指针,比如有时候我们要调用一个方法,但我们在编译的时候并不知道那个方法将要被调用,在具体执行的时候才确定那个方法被调用,这相当一个佚名的方式.比如说我们在写的时候就留下一个可能性在后来,他可以去调其他的各种方法去执行.而c#的委托要比c++更加强大,因为他是面向对象的,他的类型是安全的.c++里面的函数指针直接指向一个函数,并没有什么特别的要求,但是在c#语言中 委托具体的函数 参数 返回值都是确定的,都在委托里面定义好的. C#

【C#】delegate 和 event

在开始之前,先说一下文章的表达习惯. Object a = new Object(); 在上面的例子里,Object 是一种类型,a 是一个引用,new Object() 构造了一个对象,有时 ”构造对象“ 也被称为 ”创建实例“.有的文章习惯把 a 也称作实例,请根据上下文理解不要混淆.接下来你会经常看到类似 ”Object 类型“ ”Object 引用“ ”Object 对象“ 这样的表达. 另外,我会尽量使用 ”方法“ 而不使用 ”函数“ 的称呼.习惯使用 C/C++ 的读者接下来看到 ”

C#委托与C语言函数指针及函数指针数组

C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用的时候通过指针访问这个函数. 在C语言中函数指针的申明如下: //可以理解为申明一个指着变量 Func ,它的类型是 返回Type(可以为 void )类型的参数,接收 (Type one,Type two,...)类型的//参数(可以不接受参数). Type *Func(Type one,Type

用java语言实现事件委托模式

http://blog.csdn.net/yanshujun/article/details/6494447 用java语言实现事件委托模式 2010-04-27 00:04 2206人阅读 评论(11) 收藏 举报 java语言游戏object设计模式date 事件委托模式是一个比较常用的设计模式,但是Java语言本身没有对其做一定的封装,因此实现起来有一定难度(了解原理后很简单),相比之下.NET就容易了很多. 身为一个Java爱好者,怎么向这样一个小困难低头,但是上网搜索,却没发现相关解决

C#6.0语言规范(十五) 委托

委托启用其他语言(如C ++,Pascal和Modula)已使用函数指针进行寻址的方案.但是,与C ++函数指针不同,委托是完全面向对象的,与成员函数的C ++指针不同,委托封装了对象实例和方法. 委托声明定义了从类派生的类System.Delegate.委托实例封装了一个调用列表,该列表是一个或多个方法的列表,每个方法都被称为可调用实体.对于实例方法,可调用实体由该实例上的实例和方法组成.对于静态方法,可调用实体仅包含一个方法.使用适当的参数集调用委托实例会导致使用给定的参数集调用每个委托的可

.NET进阶篇-语言章-2-Delegate委托、Event事件

知识只有经过整理才能形成技能 整个章节分布简介请查看第一篇 内容目录 一.概述 二.解析委托知识点 1.委托本质 2.委托的使用 3.委托意义 逻辑解耦,减少重复代码 代码封装支持扩展 匿名方法和Lambda表达式 异步多线程 多播委托 三.事件 四.总结 一.概述 先说下委托,委托我们也经常用到.详尽了解委托是必要的,不然在异步多线程的编程中会一头雾水.委托本质就是一个类,和我们平常定义的类没多大区别.只是这个类的作用的是描述一些方法,没有数据成员.一个委托定义了一类拥有同样返回类型和参数的方