C/C++函数指针、C#委托是什么?

函数指针

c 复制代码
#include<stdio.h>

//声明函数指针
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 = &Sub;
	
	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委托
csharp 复制代码
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<int, int, int> func = new Func<int, int, int>(ca.Add);
            Func<int, int, int> func2 = new Func<int, int, int>(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;
        }
    }
}
相关推荐
2401_869769599 小时前
内容5 日期类实现
开发语言·c++
xxwl5859 小时前
一个原创题(二)
c++·算法
aini_lovee9 小时前
C# 快递单打印系统(万能套打系统)
开发语言·c#
MZZ骏马9 小时前
C++ 极简模式的日志
c++
白菜上路9 小时前
C# Serilog.AspNetCore基本使用
c#·serilog
AbandonForce10 小时前
滑动窗口:定长滑动窗口与不定长滑动窗口
数据结构·c++·算法
小欣加油10 小时前
leetcode3689最大子数组总值I
c++·算法·leetcode·职场和发展·贪心算法
caimouse10 小时前
Reactos 第 5 章 进程与线程 — 5.12 进程挂靠
c语言·windows
小白不白11110 小时前
C# WinForm 与 VP 二次开发
开发语言·c#
有点。10 小时前
C++(贪心算法二)
开发语言·c++·贪心算法