`

各个语言中的函数指针

阅读更多

C#中有委托,actionscript中有 function类型等这些于C语言中的函数指针有什么关系呢,在汇编中又是怎么样对应的呢?今天我们来总结一下:

ActionScript:

 

java

 

C#

 

delegate void dosomething(string name);
    class demo
    {
        public void test(string name)
        {
            System.Console.WriteLine(name);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {             
            demo d = new demo();
            dosomething d3o = d.test;
            d3o("hello word");
        }
    }
       
00000000  push        ebp 
00000001  mov         ebp,esp 
00000003  push        edi 
00000004  push        esi 
00000005  push        ebx 
00000006  sub         esp,40h 
00000009  mov         esi,ecx 
0000000b  lea         edi,[ebp-4Ch] 
0000000e  mov         ecx,10h 
00000013  xor         eax,eax 
00000015  rep stos    dword ptr es:[edi] 
00000017  mov         ecx,esi 
00000019  mov         dword ptr [ebp-3Ch],ecx 
0000001c  cmp         dword ptr ds:[007A0AE8h],0 
00000023  je          0000002A 
00000025  call        5BA747B7 
0000002a  xor         edx,edx 
0000002c  mov         dword ptr [ebp-44h],edx 
0000002f  xor         edx,edx 
00000031  mov         dword ptr [ebp-40h],edx 
00000034  nop 
            demo d = new demo();
00000035  mov         ecx,7A1A98h 
0000003a  call        FFF3FD48 
0000003f  mov         dword ptr [ebp-48h],eax 
00000042  mov         ecx,dword ptr [ebp-48h] 
00000045  call        FFF5A468 
0000004a  mov         eax,dword ptr [ebp-48h] 
0000004d  mov         dword ptr [ebp-40h],eax 
            dosomething d3o = d.test;
00000050  mov         ecx,7A1B50h 
00000055  call        FFF3FD48 
0000005a  mov         dword ptr [ebp-4Ch],eax 
0000005d  mov         eax,22C818h 
00000062  push        eax 
00000063  mov         ecx,dword ptr [ebp-4Ch] 
00000066  mov         edx,dword ptr [ebp-40h] 
00000069  call        5AAC1918 
0000006e  mov         eax,dword ptr [ebp-4Ch] 
00000071  mov         dword ptr [ebp-44h],eax 
            d3o("hello word");
00000074  mov         edx,dword ptr ds:[02822188h] 
0000007a  mov         ecx,dword ptr [ebp-44h] 
0000007d  mov         eax,dword ptr [ecx+0Ch] 
00000080  mov         ecx,dword ptr [ecx+4] 
00000083  call        eax 
00000085  nop 
        }
00000086  nop 
00000087  lea         esp,[ebp-0Ch] 
0000008a  pop         ebx 
0000008b  pop         esi 
0000008c  pop         edi 
0000008d  pop         ebp 
0000008e  ret 
  

C语言

 

Python

分享到:
评论

相关推荐

    指针, 指针的指针, 数组, 指针数组, 数组指针, 指针函数, 函数指针 CC++中函数指针的含义

    通过将函数指针传递给其他函数,可以在这些函数内部调用我们传入的函数,这在设计模式和事件驱动编程中非常常见。 了解这些概念后,程序员可以更灵活地处理数据和控制程序流程,尤其是在编写系统级或底层代码时。...

    java函数语言大全

    C语言中的函数指针可以存储函数的地址,使得函数可以作为参数传递或被其他函数返回。这在回调函数和高阶函数中非常常见。 **6. 变量作用域:** 在函数内部定义的变量只有在该函数内部可见,称为局部变量。全局变量...

    C语言函数的值调用、应用、指针、嵌套、递归

    函数指针是C语言中的一个强大特性,它允许我们存储函数的地址并像普通变量一样传递。通过函数指针,我们可以动态地决定调用哪个函数,或者将函数作为参数传递给其他函数。例如,可以定义一个通用排序函数`void sort...

    c 语言函数表(函数用法)

    下面,我们将深入探讨C语言函数的各个方面,以及如何在实际编程中应用这些知识。 1. **函数定义与声明**: - **函数定义**:定义一个函数包括指定返回类型、函数名和参数列表。例如: ```c int add(int a, int b...

    易语言取类指针及方法指针源码

    函数指针可以理解为指向函数的指针,而委托是.NET框架中的一种类型安全的函数指针,可以将方法当作参数传递,或者在不同的地方调用。在易语言中,我们可以创建一个事件处理函数,然后将这个函数的地址作为参数传递,...

    C语言函数大全 函数例题

    总结来说,“C语言函数大全”这个资源应该涵盖了函数的各个方面,包括但不限于函数的定义、参数传递、返回值、函数指针、递归、函数优化等。通过对这些例题的学习和实践,学习者能更深入地理解C语言函数的使用,并...

    10分钟通晓指针,史上最全的指针讲解

    2. **函数指针**:可以指向函数,允许我们传递函数作为参数或者将函数作为其他函数的返回值。 3. **数组指针**:实际上是指向数组首元素的指针,可以用来遍历整个数组。 4. **多级指针**:如`int **p`,指向指针的...

    C++语言_第9章 指针及其应用(6节)_codes.rar

    同时,"【例 10】编写一个函数,用于在一个包含 N 个整数的数组中找到第一个质数.cpp"展示了如何使用函数指针来查找数组中的第一个质数。 此外,"【例 5】scanf 使用数组名,用数组名或指针访问数组。.cpp"讨论了...

    c语言中各个函数的说明

    在C语言中,函数是代码组织的基本单元,它们允许我们将特定的任务封装到可重用的代码块中。`c_handbook.zip`文件提供了关于C语言各种库函数的中文说明,这对于初学者和有经验的开发者来说都是宝贵的资源。以下是一些...

    C语言习题指针1程序设计语言.pdf

    通过指针数组可以访问或操作字符串数组中的各个字符串。 12. 指针和循环结构 在循环结构中,指针可以用来控制遍历数组或字符串的顺序。通过指针的自增或自减操作,可以实现灵活的遍历逻辑。 13. 指针和函数的...

    C语言教学中“指针教学方法”探讨.pdf

    10. 指针的高级用法:包括指针函数、函数指针以及回调函数的概念和使用。 为了帮助学生更好地掌握指针的知识,教学方法应该包括: - 实例演示:通过具体例子演示指针的基本操作,比如如何利用指针访问变量、如何...

    语言二级辅导指针PPT学习教案.pptx

    在C语言中,指针的使用广泛,包括传递函数参数、动态内存分配以及实现动态数据结构(如链表、队列、二叉树等)。 2. **难点:理解指针数据类型**: 指针本身也是一个数据类型,比如`int *p`声明了一个指针变量p,...

    C语言函数大全,相当详尽的C函数介绍

    - 函数指针是C语言的一个强大特性,它可以存储函数的地址,使得函数可以作为其他函数的参数或返回值。 8. **递归函数** - 递归函数是调用自身的函数,用于解决具有相同子问题的问题,如`factorial`函数计算阶乘。...

    一种C语言指针作为函数参数的图形化分析方法.pdf

    通过图形化的分析,可以清楚地展示在函数调用中,各个变量是如何在不同的作用域和生存期内进行值的传递和变化的。 此外,文章提到多重指针的教学方法,特别是二重指针的概念,这是指针指向另一个指针的指针。二重...

    让你不在害怕指针

    对于函数指针,可以指向一个函数的地址,表示这个函数可以被调用。例如,int (*p)(int)声明了一个指针p,它指向一个接受一个int参数并返回int值的函数。 在实际编程中,分析和理解复杂指针类型是一件比较困难的事情...

    C指针详解(经典,非常详细).pdf

    C语言中的指针是一个非常核心的概念,它允许...综上所述,指针是C语言中的高级特性,使用它需要对语言的内存管理和类型系统有深入的理解。通过逐步学习和实践,可以掌握指针的各种用法,写出高效且安全的C语言代码。

    c++复习资料大全 指针多态 函数 继承类等

    此外,指针与数组、动态内存分配、函数参数等结合使用时,会带来更高级的编程技巧,如指针数组、指针到指针、void指针等。 接下来,我们来看函数。函数是C++中代码的复用机制,它可以封装特定任务并多次调用。理解...

Global site tag (gtag.js) - Google Analytics