函数指针 和 指针函数

ROS2 -Jazzy 一步一步(第一步_工作间以及编译) 文件夹作用特点是否需要手动创建/维护src存放自己写的 ROS 2 包一个 workspace 可以有多个包需要手动创建build保存编译过程中的中间文件每个包生成对应子目录自动生成,可删除install保存编译完成后的功能包每个包有独立子目录,含可执行文件自动生成,可删除log保存编译日志用于查看错误原因、调试自动生成,不需修改colcon是 ROS 2 推荐使用的构建工具自动处理功能包的依赖编译顺序一条命令就能编译整个工作间。 阅读详情
在C语言中有太多让大家容易混淆的概念,如果仅仅只是走马观花的看一遍文档 或者书籍,那么只能短暂的分清楚他们之间的区别,真正要掌握,需要不断的联系和理解。记得曾经上单片机原理时,老师上一堂课程讲解的内容,大家都能理解,并对答如流,但是到第二堂课程再问及上堂课的内容时,大家都面面相觑。老师就问为什么会这样呢?大家都说忘记了。老师说:1+1等于几?结果哄堂大笑。老师说只有你们真正的深刻的理解了,才能算是自己的,才不至于忘记。
言归正传,今天要分析的函数指针和指针函数。


一、指针函数:
  大家肯定理解空函数、整形函数。空函数,就是没有任何返回的函数。而整形函数就是返回一个整数的函数。C语言中有一些基本的数据类型,如字符型,浮点型,整形等,那么除了基本的数据类型外,还有一些复杂的数据类型,如结构体,联合体,枚举,指针等。从前面的空函数和整形函数的理解来看,指针函数就是返回指针的函数。

如C语言库函数中的strncat,它的实现就是:

char*	strncat(char *dest, const char *src, size_t len)
{
	char* tmp = dest;

	while ( *tmp++ != '\0');

	for ( size_t i = 0; i < len;src++,i++ ) 
	{
		*tmp++ = *src;
	}

	return tmp;
}

这就是一个指针函数,它返回的指针,该指针指向src连接到dest后的一个字符串。

注意:不要和形参中的指针搞混淆了。可以作为形参的数据类型很多,比如一个整型数据,浮点数,字符串,结构体,指针,枚举型变量,甚至一个函数名,一个类对象(C++中常用到,以后会详解)。不过大家需要注意到,计算机存取任何东西都是通过指针或者叫地址来操作的,就不难理解了。


二、函数指针:

大家都知道,在计算机的世界里存、取数据都是通过地址来操作的。假如把计算机世界比喻为一个酒店,把存取数据比喻为进出自己预定的房间。那么计算机世界的地址就是和酒店的房间号是对应的。那我们就成了“数据”了。比如整形数据,浮点型数据,字符串,常量等都是按照一定的地址存放的。等到程序需要的时候,就按照之前安排好的地址去取。从某种意义上来说,程序是由数据和一定的逻辑关系组成的。难道我们的代码不是在操作一个一个的变量吗?既然如此,数据或者叫变量我们知道是按照地址来存放的,或者访问的。那么函数的作为一个数据和数据逻辑关系的集合,同样也应该按照地址来访问,这个地址在C语言中一般称为指针,那么指向该函数的指针,就称为函数指针。

想来,大家现在应该明白什么是函数指针,什么又是指针函数了。

常用调用方式如下:

#include "stdio.h"
#include "conio.h"

int max(int x,int y);

int main(char argc,char** argv)
{
	int a = 10;
	int b = 20;

	int (*p_fun)(int,int);	//定义函数指针

	p_fun = max;	//将max的地址传递给p_fun

	printf("the max value = %d\n",p_fun(a,b));

	getch();

	return 0;
}

int max(int x,int y)
{
	int z = 0;

	return z = x > y ? x : y; 
}

注意:在传递函数的地址时,除了按照上面那样外,还可以像这样:p_fun = &max; 。在定义函数指针的时候,要注意形参的类型、个数以及返回值的类型要和被指向函数的形参的类型、个数以及返回值的类型要一致。至于为什么,我在这里抛砖引玉了。


三、函数指针的定义:

如第二部分介绍的: int (*p_fun)(int,int);这是一种简单的定义形式。

另一种常见的定义形式为:typedef  int  (*p_fun)(int,int);

这种方式定义了一个新的类型,那就是p_fun,以后可以像使用int,char,float等数据类型一样使用p_fun了。





ICESat-2数据下载及处理分析随笔 ICESat-2全称是Ice,Cloud and land Elevation Satellite -2。看名字我们能知道它的任务是测ice,cloudland elevation,而且这是一个Satellite,是一颗卫星。那么这里我们就要分清ICESat-2ATLAS的关系,ICESat-2是星载平台,是一个space observatory,ATLAS是这个星载平台上搭载的单光子激光雷达系统。 阅读详情

相关推荐

别再手动上传了!用宝塔面板的‘Let‘s Encrypt’免费SSL证书,3分钟自动续期

本文详细介绍了如何利用宝塔面板的‘Let‘s Encrypt’功能实现SSL证书的自动申请续期,3分钟完成配置即可永久免费使用。通过对比不同SSL证书方案,突出Let's Encrypt的免费、自动续期高安全性优势,特别适合个人博客中小企业官网。

weixin_30415113的博客 131

指针函数指针

指针 void pointers指针void 是一种特殊类型的指针。void 指针可以指向任意类型的数据,可以是整数,浮点数甚至字符串。唯一个限制是被指向的数值不可以被直接引用(不可以对它们使用引用星号*),因为它的长度是不定的,因此,必须使用类型转换操作或赋值操作来把void 指针指向一个具体的数据类型。它的应用之一是被用来给函数传递通用参数:// integer increaser #incl

嘿嘿嘿呼呼嘿 4338

树莓派4B之OpenCV人脸识别实战:从Haar Cascade到实时检测(保姆级教程)

本教程详细介绍了如何在树莓派4B上部署OpenCV,并利用Haar Cascade算法实现实时人脸识别。内容涵盖从系统环境搭建、算法原理解析到代码逐行讲解与实战调优,为嵌入式AI计算机视觉初学者提供了一份完整的保姆级实践指南。

p8q9r0的博客 380

指针、void指针函数指针

一、指针是一种特殊的指针  一个指针变量指向指针,表示该指针处于闲状态下,不指向任何地址 P=NULL;表示指针变量P指向指针; 同时任何不用的指针都必须指向指针,避免野指针的出现。 二、通用指针可以指向任何数据类型,也称void指针,可以把任何类型的指针变量赋给void指针; int *PA; void *PB; PB=(void*)PA; 同样,也可以把

chaoshui7758的博客 2445

C语言函数指针与NULL

C语言中,函数指针普通指针类似,如果定义了一个函数指针,比如int (*fun)(int a,int b); 那么函数指针fun将默认初始化为NULL。 注意: 1)函数指针不是函数声明,不要混淆。 2)C中函数名可以隐式转换为函数指针,但是C++中非静态成员函数无法隐式转换, 因此在C/C++中获取函数指针时最好统一用取地址符&:即函数指针 = &函数名。 ...

fish的专栏 3226

c语言中将函数指针作为形参_在C中将有效指针作为NULL指针

c语言中将函数指针作为形参Prerequisite: An Example of Null pointer in C 先决条件: C中的指针示例 Any pointer that contains a valid memory address can be made as a NULL pointer by assigning 0. 通过分配0,可以将包含有效内存地址的任何指针设置为NU...

cumtb2002的博客 581

C++ 函数指针指针函数

C++中的一个重要概念及其特点,也是掌握C++ 比较困难的部分。本文主要介绍函数指针指针函数用法及区别。 1、指针函数 指针函数,简单理解就是一个返回指针函数,其本质是一个函数,而该函数的返回值是一个指针。声明格式如下: *类型标识符 函数名(参数表) 例如, int *myfun(int x,int y); 注意:在函数名前面多了一个*号,而这个函数就是一个指针函数。其返回值是一个 int 类型的指针指针函数的写法可以有以下几种: int *fun(int x,int y);

m0_52902391的博客 5174

函数指针指针函数以及数组指针指针数组区别

函数指针(指向函数指针) 与数据项类似,函数也有自己的地址。函数的地址是存储其机器代码的内存的开始地址。例如,可以编写将另一个函数的地址作为参数的函数,这样第一个函数将能够找到第二个函数,并运行它。与直接调用另一个函数相比,这种方法显得很笨重,但它允许在不同的时间传递不同函数的地址,这意味着可以在不同的时间使用不同的函数函数指针的用法需要以下三个步骤: 获取函数的地址 声明一个函数指...

一丁的博客 2974

指针函数函数指针

指针

xc_123的博客 6709

指针函数函数指针的理解与应用

指针函数 指针函数, 即返回值为指针函数, 本质上是一个函数, 我们先看下面实例: #include &amp;lt;stdio.h&amp;gt; #include &amp;lt;time.h&amp;gt; int year; int mon; int day; char* GetDate(); int main() { char* current = GetD...

Sock的博客 5346

函数指针指针函数

函数指针指针函数

弘毅_hao的博客 5120

指针进阶之函数指针函数指针数组

指针进阶之函数指针函数指针数组,想学的进来

人生得意须尽欢 559

C语言函数指针指针函数

写法不同可以简单粗暴的理解为,指针函数的是属于数据类型的,而函数指针的星号是属于函数名的。再简单一点,可以这样辨别两者:函数名带括号的就是函数指针,否则就是指针函数

AnChenliang_1002的博客 2035

函数指针返回函数指针函数

前言 无 函数指针 这里函数在前,指针在后所以很明显这是再说一个指针,也就是那个十六进制整数。 可以知道函数名所指向的就是内存中函数的首地址,那么完全可以使用一个指针来指向这个首地址。声明方式如下 type (*变量名)(参数); // 如 int (*pf)(int, int) 这个声明的意思就是一个函数指针,指向一个返回值为 int型,参数为两个 int型的函数首地址。这里面用一个括号强行将*的优先级提高,使得这个变量名先代表的是指针。但是很明显这里是没有具体的函数内容的,也就是说需要一个现成的函

cuoxin123的博客 1510

指针函数函数指针区别

指针函数是返回值为指针类型的函数,简单的来说,它本身是一个函数,只是这个结果是返回的指针类型,该指针可以指向各种数据类型,如整形、浮点型、结构体等。指针函数是一个函数,只是返回值为指针;而函数指针本质是一个指针变量,它指向的是函数指针函数常用于返回动态分配的内存地址或数组等;函数指针常用于实现回调函数函数表等,以提高程序的灵活性可扩展性。

千千道的博客 949

函数指针指针函数区别及使用

文章目录指针函数函数指针 指针函数 指针函数本质是一个函数,返回值是某一类型指针 写法如下: int* fun(int x,int y); int * fun(int x,int y); int *fun(int x,int y); 例子如下: #include<iostream> using namespace std; char * D(char s[]) { return s...

yuabcxiao的博客 3406

函数指针指针函数函数指针数组

 【函数指针】       在程序运行中,函数代码是程序的算法指令部分,它们数组一样也占用存储间,都有相应的地址。可以使用指针变量指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址的指针变量称为函数指针。1.函数指针定义函数类型 (*指针变量名)(形参列表);“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”

sunhy1021的专栏 1417

mydumper-0.14.5-3.el7.x86-64

mydumper-0.14.5-3.el7.x86_64

京东商品价格数据爬取与分析系统_通过Python爬虫技术定时抓取京东指定商品链接的价格信息并存储至本地数据库_利用数据可视化与统计方法分析价格波动趋势与竞品对比_为电商运营与市场研.zip

京东商品价格数据爬取与分析系统_通过Python爬虫技术定时抓取京东指定商品链接的价格信息并存储至本地数据库_利用数据可视化与统计方法分析价格波动趋势与竞品对比_为电商运营与市场研.zip

上一篇: 分析 BOOL & bool
下一篇: 结构体字节对齐
SingleCode
博客等级 码龄15年 11粉丝 6原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值