知识梳理:函数和指向函数的指针

文章介绍了C++中的函数使用,包括函数原型的作用、参数传递、函数与数组、字符串、结构体的关系。接着讲解了函数指针的概念,如何声明和使用,以及其在回调函数中的应用,强调了函数指针在复杂代码组织中的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

函数和指向函数的指针

 


一、c++函数

使用C++函数的过程:
提供函数定义;

提供函数原型;

调用函数;

typeName functionName(parameterList)
{
    statements
    return values;
}

void functionName(parameterList)
{
    statement(s)
    return;
}

1.原型的作用

原型描述了函数到编译器的接口,它将函数返回值的类型以及参数的类型和数量告诉编译器。

2.函数参数和按值传递

接受传递至的变量被称为形参,传递给函数的值被称为实参。

3.函数和数组

函数和数组的结合

int sum_arr(int arr[],int n)

 方括号为空则表明,可以将任何长度的数组传递给该函数。但arr其实是指针,但可以看作数组。

可以用int *arr替换 int arr[],但是只能在函数头或者函数原型中才可以。都意味着一个指针,但是数组表示法,提醒还指向数组的第一个int

而当指针指向独立一个值的时,使用指针表示法。

//数组处理函数的常用编写方式
void f_modify(double ar[],int n);

void _f_no_change(const double ar[],int n);

 4.函数与二维数组

5. 函数与C-风格字符串

6.函数和结构

7.函数和string对象

8.函数和array对象

二,函数指针

与数据项相似,函数也有地址。函数的地址是存储其机器语言代码的内存的开始地址。

声明指向某种数据类型的指针时,必须指定指针指向的类型。

同样,声明指向函数的指针时,也必须指定指针指向的函数类型。

//函数原型
double pam(int);
//指针类型声明
double (*pf)(int);
//(*pf)是函数,pf是函数指针。

 若无括号 double *pf(int)则意味着pf()是一个返回指针的函数。

函数指针使用示例

double pam(int);
double (*pf)(int);
pf = pam;

void estimate(int lines,double (*pf)(int));

estimate(50,pam);
//编写原型困难,但是传递地址简单

 引用:

为什么要使用函数指针?

那么,有不少人就觉得,本来很简单的函数调用,搞那么复杂干什么?其实在这样比较简单的代码实现中不容易看出来,当项目比较大,代码变得复杂了以后,函数指针就体现出了其优越性。
举个例子,如果我们要实现数组的排序,我们知道,常用的数组排序方法有很多种,比如快排,插入排序,冒泡排序,选择排序等,如果不管内部实现,你会发现,除了函数名不一样之外,返回值,包括函数入参都是相同的,这时候如果要调用不同的排序方法,就可以使用指针函数来实现,我们只需要修改函数指针初始化的地方,而不需要去修改每个调用的地方(特别是当调用特别频繁的时候)。
回调函数

函数指针的一个非常典型的应用就是回调函数。
什么是回调函数?
回调函数就是一个通过指针函数调用的函数。其将函数指针作为一个参数,传递给另一个函数。
回调函数并不是由实现方直接调用,而是在特定的事件或条件发生时由另外一方来调用的。
同样我们来看一个回调函数的例子:
————————————————
版权声明:本文为优快云博主「chenyc4」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/u010280075/article/details/88914424

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值