C/C++函数指针、C#委托是什么?
函数指针
#include //声明函数指针 typedef int(*Calc)(int a, int b); int Add(int a, int b) { return a + b; } int Sub(int a, int b) { return a - b; } int main() { Calc funcPoint1 = &Add; Calc funcPoint2 = ⋐ int x = 120; int y = 140; int z = 0; z = Add(x, y); z = funcPoint1(x, y); printf("%d+%d=%d\n", x, y, z); z = Sub(x, y); z = funcPoint2(x, y); printf("%d-%d=%d\n", x, y, z); system("pause"); }
一切皆地址
(图片来源网络,侵删)
变量(数据):是以某个地址为起点中的一段内存中所存储的值;
函数(算法):是以函数名为地址起点的一段内存中所存储的一组机器语言指令;
C#中委托是什么?
委托(delegate)是函数指针的‘升级版’;
委托的简单使用
- Action委托
- Func委托
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FunctionPointerExampleCsharp { class Program { static void Main(string[] args) { Calculator ca = new Calculator(); Action action = new Action(ca.Report); ca.Report(); action.Invoke(); action(); Func func = new Func(ca.Add); Func func2 = new Func(ca.Sub); int result=func.Invoke(12, 34); Console.WriteLine(result); result=func2.Invoke(123, 34); Console.WriteLine(result); result =func(12, 34); Console.WriteLine(result); result =func2(123, 34); Console.WriteLine(result); } } class Calculator { public void Report() { Console.WriteLine("Hello,Tom!"); } public int Add(int a, int b) { return a + b; } public int Sub(int a, int b) { return a - b; } } }
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。