C++笔记之从数组指针到函数数组指针(使用using name和std::function)

news/2024/11/7 22:50:27/

C++笔记之从数组指针到函数数组指针(使用using name和std::function)

参考笔记:
C++之指针探究(三):指针数组和数组指针
C++之指针探究(十三):函数指针数组
C++之指针探究(二):一级指针和一维数组
C++之指针探究(十一):函数名的本质和函数指针
C++笔记之从使用函数指针和typedef到使用std::function和using
C++之指针探究(八):指针函数和函数指针

code review!

文章目录

  • C++笔记之从数组指针到函数数组指针(使用using name和std::function)
    • 1.指向数组的指针
    • 2.指向动态数组的指针
    • 3.函数指针数组和std::function、using结合使用的例程
      • 形式一:MathFunction mathFunctions[] = {add, subtract, multiply, divide};
      • 形式二:MathFunction *mathFunctions[] = {add, subtract, multiply, divide};
      • 形式三:MathFunction *mathFunctions = new MathFunction[4];
    • 附代码

1.指向数组的指针

在这里插入图片描述

2.指向动态数组的指针

在这里插入图片描述

3.函数指针数组和std::function、using结合使用的例程

形式一:MathFunction mathFunctions[] = {add, subtract, multiply, divide};

在这里插入图片描述

形式二:MathFunction *mathFunctions[] = {add, subtract, multiply, divide};

在这里插入图片描述

形式三:MathFunction *mathFunctions = new MathFunction[4];

在这里插入图片描述

附代码

形式一:

#include <iostream>
#include <functional>// 定义不同类型的函数
int add(int a, int b) {return a + b;
}int subtract(int a, int b) {return a - b;
}double multiply(double a, double b) {return a * b;
}double divide(double a, double b) {return a / b;
}// 创建函数指针数组类型
using MathFunction = std::function<double(double, double)>;int main() {// 创建函数指针数组MathFunction mathFunctions[] = {add, subtract, multiply, divide};// 使用函数指针数组调用不同函数double x = 10.0, y = 5.0;for (const MathFunction &func : mathFunctions) {std::cout << func(x, y) << std::endl;}return 0;
}

形式二:

#include <iostream>
#include <functional>// 定义不同类型的函数
int add(int a, int b) {return a + b;
}int subtract(int a, int b) {return a - b;
}double multiply(double a, double b) {return a * b;
}double divide(double a, double b) {return a / b;
}// 创建函数指针数组类型
using MathFunction = std::function<double(double, double)>;int main() {// 创建指针数组并初始化MathFunction *mathFunctions[] = {add, subtract, multiply, divide};// 使用指针数组调用不同函数double x = 10.0, y = 5.0;for (MathFunction *func : mathFunctions) {std::cout << (*func)(x, y) << std::endl;}return 0;
}

形式三:

#include <iostream>
#include <functional>// 定义不同类型的函数
int add(int a, int b) {return a + b;
}int subtract(int a, int b) {return a - b;
}double multiply(double a, double b) {return a * b;
}double divide(double a, double b) {return a / b;
}// 创建函数指针数组类型
using MathFunction = std::function<double(double, double)>;int main() {// 创建指针数组并初始化MathFunction *mathFunctions = new MathFunction[4];mathFunctions[0] = add;mathFunctions[1] = subtract;mathFunctions[2] = multiply;mathFunctions[3] = divide;// 使用指针数组调用不同函数double x = 10.0, y = 5.0;for (int i = 0; i < 4; ++i) {std::cout << mathFunctions[i](x, y) << std::endl;}// 释放内存delete[] mathFunctions;return 0;
}

http://www.ppmy.cn/news/1010078.html

相关文章

Leetcode-每日一题【剑指 Offer 10- I. 斐波那契数列】

题目 写一个函数&#xff0c;输入 n &#xff0c;求斐波那契&#xff08;Fibonacci&#xff09;数列的第 n 项&#xff08;即 F(N)&#xff09;。斐波那契数列的定义如下&#xff1a; F(0) 0, F(1) 1 F(N) F(N - 1) F(N - 2), 其中 N > 1. 斐波那契数列由 0 和 1 开…

Kali中AWD靶机环境搭建

Kali中AWD靶机环境搭建 1、kali安装docker2、克隆项目&#xff08;400多M&#xff0c;下载会有点久&#xff09;3、进入项目4、下载镜像5、改镜像名6、比赛环境搭建6.1 启动靶机6.2 连接裁判机&#xff0c;启动check脚本6.3 关闭环境命令 7、 靶机访问方式7.1 web界面访问7.2 s…

idea:Web server failed to start. Port 8081 was already in use.

文章目录 Web server failed to start. Port 8081 was already in use.问题描述解决方案1解决方案2关闭占用端口 Web server failed to start. Port 8081 was already in use. 问题描述 8081端口被占用 解决方案1 查看配置信息 重启idea 解决方案2 关闭占用端口 1.使用c…

java并行流的介绍

什么是并行流&#xff1f; 在介绍并行流之前&#xff0c;我们首先需要了解Stream API是什么。Stream API允许我们以声明性的方式对数据进行操作&#xff0c;例如过滤、映射、排序等&#xff0c;而无需编写繁琐的迭代和循环代码。这不仅提高了代码的可读性&#xff0c;还可以帮…

codeup(云效)流水线部署主机离线的问题

我是通过 云助手Agent 来进行部署的&#xff0c;也就是codeup账号和ecs不是一个账号。 助手的安装等问题参考&#xff1a; 在ECS及自有主机上部署云效失败的常见问题_云效-阿里云帮助中心 如何启动、停止或卸载云助手客户端_云服务器 ECS-阿里云帮助中心 如何安装云助手客…

【C# 基础精讲】C# 数据类型概述

在C#中&#xff0c;数据类型可以分为以下三大类&#xff1a;值类型、引用类型和指针类型。每种类型都具有不同的特点和适用场景&#xff0c;了解这些类型对于编写高效和稳健的C#程序至关重要。下面将依次介绍这三大类数据类型&#xff0c;并列出C#中常见的每种类型。 值类型 值…

sptring AOP两种动态代理

本文开始 1.spring AOP 实现动态代理的方式&#xff1a;JDK Proxy &#xff0c; CGLIB; JDK Proxy实现代理**&#xff1a;通过 反射 实现接收代理的类 并且代理类必须实现接口&#xff1b;- 接口 CGLIB实现代理**&#xff1a;通过 继承 方式实现动态代理&#xff1b;&#xf…

【编译原理】五、简单四则运算的代码实现

1. 前言 前面说了那么多BNF的相关理论知识&#xff0c;实际上就是为了一个目的&#xff1a; 描述语法规则 描述语法规则是一切的开始。最终&#xff0c;还是要用代码来实现。 如果对于BNF仍然是一头雾水&#xff0c;也没关系&#xff0c;因为我们的最终目的是编写解析器&…