C++ code:函数指针参数
函数指针除了进行参数传递外,还承接申请的存储空间、释放空间等。而函数指针则主要是用来进行参数传递的,就像引用一样。
例如,我们来看一下函数指针的传递工作。在标准排序算法sort中,对于所提的整数容器vector,无须提供其他操作就可以顺利完成排序任务。代码如下:
int a[] = {,,,,,,,};
vector<int> aa(a,a+);
sort(aa.begin(),aa.end());
但若整数的大小是以各位数字之和的大小来确定的,则就不能直接使用sort标准函数来排序。需要先定义一个比较函数,然后再对sort传递比较函数指针,以让sort知道大小关系不是默认的整数值比较,而是根据比较函数来判定。可用函数指针调取比较函数,来进行排序工作。代码如下:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std; int bitSum(int a);
bool lessThanBitSum(int a, int b){ return bitSum(a) < bitSum(b); }; int main()
{
int a[] = { , , , , , , , };
vector<int> aa(a, a + );
sort(aa.begin(), aa.end(),lessThanBitSum);
for (int i = ; i < aa.size(); ++i)
cout << aa[i] << " ";
cout << "\n";
}
int bitSum(int a)
{
int sum = ;
for (int x = a; x; x /= ) sum += x % ;
return sum;
}

第13行的sort调用,其第三个实参为比较函数名lessThanBitSum,函数名即为函数指针,正像数组名即为指针一样。sort的形参为一个相对应的函数指针,正像数组传递中,形参为对应的指针那样。
标准排序算法的使用,依赖于容器中元素类型的小于“<”操作,如果排序的容器中是整数元素,那么,小于“<”的比较判断函数可以省略。因为整数的大小比较操作在C++中本来就具备。否则,sort函数的调用还必须提供第三个参数——指针函数。其参数类型为某个元素类型T的bool(const T&,const T&)。
C++ code:函数指针参数的更多相关文章
- [C]关于函数指针参数的赋值
问题 在有一次尝试用stat()函数获取文件属性的时候,发现如果直接声明一个指针,然后把这个指针作为参数传给函数,会导致函数执行失败,原代码: #include <sys/stat.h> ...
- Delphi 函数指针(函数可以当参数)
首先学习: 指向非对象(一般的)函数/过程的函数指针 Pascal 中的过程类型与C语言中的函数指针相似,为了统一说法,以下称函数指针.函数指针的声明只需要参数列表:如果是函数,再加个返回值.例如声明 ...
- Delphi 函数指针(三大好处:灵活,委托的本质,回调机制),还可把函数指针当参数传入
首先学习: 指向非对象(一般的)函数/过程的函数指针 Pascal 中的过程类型与C语言中的函数指针相似,为了统一说法,以下称函数指针.函数指针的声明只需要参数列表:如果是函数,再加个返回值.例如声明 ...
- 成员函数指针与高效C++委托 (delegate)
下载实例源代码 - 18.5 Kb 下载开发包库文件 - 18.6 Kb 概要 很遗憾, C++ 标准中没能提供面向对象的函数指针. 面向对象的函数指针也被称为闭包(closures) 或委托(del ...
- C++——将成员函数作为参数
在C++中,成员函数指针作为参数传递给其他函数和普通函数指针的传递是不同的,首先 我们来回顾一下普通函数指针的传递方法: //------------------------------------- ...
- c函数指针
#include <stdio.h> int max(int a, int b){ return a > b ? a : b; } int min(int a, int b){ re ...
- Object C函数指针@selector
其作用相当于函数指针,现在我看到的大多说用法都是在调用某些函数需要传递一个 函数指针 参数时,使用@selector.它会在当前类里面查找selector后面所跟的函数,返回一个SEL类型的值. S ...
- C++对C语言的拓展(5)—— 函数重载和函数指针结合
1.函数指针的介绍 函数指针指向某种特定类型,函数的类型由其参数及返回类型共同决定,与函数名无关.举例如下: int add(int nLeft,int nRight);//函数定义 该函数类型为in ...
- C++基础 inline 默认参数 函数占位参数 函数重载
1. inline内联函数 内联函数用于替换宏, 实例: 其中宏和 ++ 连用有副作用. #include "iostream" using namespace std; #def ...
随机推荐
- python---web框架本质(1)
总的来说php相对较为简单,但是内部封装太多,不利于对编程的更本质探索. 但是对于生产开发确实是一门不错的语言.python对于socket以及web框架的理解更加透彻 # coding:utf8 # ...
- 如何在github上下载单个文件
原文链接:https://www.cnblogs.com/zhaoqingqing/p/5534827.html 找到目标文件,打开,会看到raw,右键,目标另存为.ok
- VS Code调试Golang提示Failed to continue:Check the debug console for details.
解决方法: 打开调试面板 VSCode->查看->调试 添加调试目标 在"没有调试"的下拉框中点击"添加配置.."添加目标调试配置 在" ...
- JVM锁简介:偏向锁、轻量级锁和重量级锁
转自:https://www.aimoon.site/blog/2018/05/21/biased-locking/ 比较复杂,简略见另一篇:https://www.cnblogs.com/twohe ...
- CodeForces - 163B Lemmings
B. Lemmings time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...
- "飞机大战"游戏_Java
1 package cn.xiaocangtian.Util; import java.awt.Frame; import java.awt.Graphics; import java.awt.Ima ...
- Nginx 学习笔记(一)如何配置一个安全的HTTPS网站服务器
一.系统环境 1.系统:Ubuntu 16.04.2 LTS 2.WEB服务器:Openresty11.2.5 二.开始配置 1.获取certbot客户端 wget https://dl.eff.or ...
- Docker-03 docker 加速器--DaoCloud 1.0
最近在研究Docker,关于安装和加速器配置没有找到很详细的文章(手把手或者无人值守),对于小白的我,吃了不少苦头.于是我要把我学习Docker的过程记录下来,前面已经写了两篇文章了: Docker- ...
- .net 加密与解密
public class Encrypts { /// <summary> /// 构造方法 /// </summary> public Encrypts() { } /// ...
- Nginx 日志处理
. nginx日志统计独立ip的个数: awk '{print $1}' /access.log | sort | uniq | wc -l . 查询访问最多的前10个ip awk . 查看某段时间的 ...