前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >1.C++程序设计——函数指针

1.C++程序设计——函数指针

作者头像
小飞侠xp
发布2021-03-02 14:29:52
3570
发布2021-03-02 14:29:52
举报
文章被收录于专栏:书山有路勤为径

基本概念

  • 程序运行期间,每个函数都会占用一段连续的内存空间
  • 函数名就是该函数所占内存区域的起始地址(入口地址)
  • 可以将函数的入口地址赋给指针变量,使该指针变量指向该函数,通过指针变量就可以调用这个函数
  • 这种指向函数的指针变量被称为“函数指针”

定义形式

  • 类型名(* 指针变量名)(参数类型1,参数类型2,......)
代码语言:javascript
复制
int (*pf)(int , char); //pf为一个函数指针,它所指向的函数的返回值是int,2个参数一个是int类型一个是char类型

使用方法

  • 可以用一个原型匹配的函数的名字给一个函数指针赋值
  • 通过函数指针调用他所指向函数
    • 函数指针名 (实参表)
代码语言:javascript
复制
#include <stdio.h>
void PrintMin(int a, int b)
{
  if(a < b)
    printf("%d",a);
  else
    printf("%d",b);
}
int main()
{
  void(* pf)(int, int);
  int x = 4, y = 5;
  pf = PrintMin;
  pf(x,y);
  return 0;
}
//pf指针指向PrintMin

qsort库函数

  • 对数组排序,需要知道
    • 数组起始地址
    • 数组元素个数
    • 每个元素的大小(从而得出每个元素的地址)
    • 元素谁前谁后的规则
代码语言:javascript
复制
void qsort(void *base, int nelem, unsigned int width, int(* pfCompare)(const void*,const void*));
//base:待排序数组的起始地址
//nelem:待排序数组的元素个数
//width:待排序数组的每个元素的大小(以字节为单位)
//pfCompare:比较函数的地址
//pfCompare:函数指针,它指向一个“比较函数”,该比较函数的形式如下
//int 函数名 (const void * elem1,const void * elem2);
//比较函数是程序员自己编写的
  • 排序就是一个不断比较并交换位置的过程
  • qsort函数在执行期间,会通过pfCompare指针调用“比较函数”,调用时将要比较的两个元素的地址传给“比较函数”,然后根据“比较函数”返回值判断哪个应该排在前面
  • 比较函数编写规则
    • 如果*elem1应该在前,函数返回负整数
    • 如果*elem2应该在前,函数返回正整数
    • 如果无所谓前后,函数返回0
  • 实例
    • 功能:调用qsort库函数,将一个unsigned int数组按照个位数从小到大进行排序
代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

int MyCompare(const void * elem1,const void * elem2)
{
  unsigned int * p1, * p2;
  p1 = (unsigned int *) elem1; //"*elem1" 非法,编译器不知道void指针指向的元素有多少个字节
  p2 = (unsigned int *) elem2; //"*elem2" 同上
  return (*p1 % 10) - (*p2 % 10);
}
#define NUM 5
int main()
{
  unsigned int an[NUM] = (8,123,11,10,4);
  qsort(an,NUM,sizeof(unsigned int),MyCompare);
  for(int i=0;i<NUM;i++)
    printf("%d",an[i]);
  return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本概念
  • 定义形式
  • 使用方法
  • qsort库函数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档