c/c++的指针函数与函数指针

函数

定义:
函数是数学中的一个概念,它是定义在某个数集上的一个特殊的映射关系。函数将输入值(或自变量)映射到输出值(或因变量)。函数的输入和输出可以是任何类型的数据,如数字、字符串、数组等。

函数的组成:
定义域: 函数的输入值的集合。
值域: 函数的输出值的集合。
对应关系: 输入值与输出值之间的映射关系。
函数的表示方法有多种,常用的有解析法、表格法和图象法。解析法是用数学表达式表示函数,表格法是用表格列出函数的输入值和对应的输出值,图象法则是在坐标系中画出函数的图像。

函数的应用:
函数的应用非常广泛,它可以用于描述各种自然现象和工程问题,如物理、化学、生物学、经济学等领域。在计算机科学中,函数也广泛应用于编程语言和算法设计中。

计算机领域里的函数定义:
在计算机领域,函数的概念通常指的是一种将输入转换为输出的计算方法或操作。它可以是一段代码的执行,可以接收输入并产生输出。这种计算过程可以根据输入的参数或条件进行变化,并产生不同的结果。

计算机领域中的函数通常可以分为两类:系统函数和用户自定义函数。系统函数是由操作系统或编程语言提供的标准函数,用于执行一些常见的操作,如数学运算、字符串处理、文件操作等。用户自定义函数则是由程序员根据特定需求编写的函数,用于实现特定的逻辑或算法。

在编程语言中,函数通常被定义为一个独立的代码块,可以重复使用和调用。函数的定义包括函数的名称、输入参数、返回值和函数体。函数体是实现特定功能的代码块,可以包含逻辑判断、循环、条件语句等。

函数在计算机科学中具有重要的作用,它们可以使代码更加模块化、可重用和可维护。通过将复杂的程序分解为一系列的函数,可以使程序的结构更加清晰,易于理解和维护。同时,函数还可以提高程序的效率和可靠性,因为相同的函数可以在不同的程序中重复使用,避免了重复编写代码和可能出现的错误。

——文心一言

指针

指针定义:
指针是计算机编程中一种特殊类型的变量,它存储了另一个变量的内存地址。通过使用指针,可以直接访问和修改变量的内存地址,从而实现更加灵活和高效的数据处理。

指针的声明和初始化通常需要使用星号(*)操作符。例如,如果有一个整数变量x,可以声明一个指向x的指针变量p,并将其初始化为x的地址,如下所示:

int x = 10;  
int *p = &x;

在这个例子中,变量p是一个指向整数类型的指针,它存储了变量x的内存地址。通过指针p,可以直接访问和修改变量x的值。例如,*p表示指针p所指向的变量的值,而p++则表示将指针p向后移动一个整数大小的内存地址。

指针的应用:
指针在计算机科学中具有广泛的应用,尤其是在底层编程、数据结构、算法等领域。通过使用指针,可以实现动态内存分配、函数参数传递、数据结构操作等复杂的数据处理任务。然而,也需要注意指针使用的安全性和正确性,以避免出现内存泄漏、野指针等问题。

——文心一言

指针函数

定义:
指针函数是指带指针的函数,本质上是一个函数;函数的返回类型是某一类型的指针。

作用:
指针函数可以用来操作内存地址,对数组内数据进行操作。

一般形式:

类型描述
通用<数据类型> *<函数名>(<函数参数列表>)
写法1int *pfun(int, int);
写法2int * func(int, int);
写法3int* func(int, int); #比较常用

取值运算符*的优先级低于圆括号,所以pfun首先和后面圆括号结合。

举例:

#include <iostream>
using namespace std;int* find_max(int arr[], int size) 
{int* max_ptr = &arr[0]; // 假设数组的第一个元素是最大的  for (int i = 1; i < size; i++) {// 如果当前元素比最大值还大  if (*max_ptr < arr[i]) {  max_ptr = &arr[i]; // 更新最大值的指针  }}return max_ptr; // 返回最大值的指针  
}int main() 
{int arr[] = { 3, 7, 2, 8, 1, 9, 5, 6, 4 };int size = sizeof(arr) / sizeof(arr[0]); // 计算数组的长度  int* max_value_ptr = find_max(arr, size); // 调用指针函数  cout << "The maximum value is:" <<  *max_value_ptr << endl;// 通过指针获取最大值并打印出来  return 0;
}

因此,利用指针函数就可以找到一个数组中最大值。
在这里插入图片描述

函数指针

定义:
函数指针是指向函数的指针变量,本质是一个指针变量;它指向函数的首地址。

作用:
函数指针允许在运行时候动态地选择要调用的函数;代码的高度复用;提供结构清晰的分层设计和灵活性,便于抽象。

函数的指针和函数指针:
在程序中定义一个函数,在编译时,编译系统为函数代码分配了一段存储空间,这段存储空间的起始地址称为这个函数的指针;而指针函数是指向函数的指针变量。

一般形式:

类型描述
通用<数据类型> (*<函数名>)(<函数参数列表>)
写法int (*pfun)(int, int);

举例:

#include <iostream>
using namespace std;// 声明一个函数指针类型  
typedef int (*func_ptr)(int, int);// 定义一个加法函数  
int add(int a, int b) 
{return a + b;
}// 定义一个减法函数  
int subtract(int a, int b) 
{return a - b;
}int main() 
{// 声明一个函数指针变量,并初始化为加法函数的地址  func_ptr func = add;int result = func(3, 4); // 调用加法函数,结果为7  printf("Add result: %d\n", result);// 修改函数指针变量,指向减法函数的地址  func = subtract;result = func(3, 4); // 调用减法函数,结果为-1  printf("Subtract result: %d\n", result);//方法2int (*f)(int, int) { add };//函数指针直接指向加法函数int (*f2)(int, int) { subtract };//函数指针直接指向减法函数printf("Add result2: %d\n", (*f)(3, 4));printf("Subtract result2: %d\n", (*f2)(3, 4));return 0;
}

可以看到函数指针的灵活性和可复用性。
在这里插入图片描述

备注

c语言的运算符优先级:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/631770.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ArcGIS Pro 如何新建布局

你是否已经习惯了在ArcGIS中数据视图和布局视图之间来回切换&#xff0c;到了ArcGIS Pro中却找不到二者之间切换的按钮&#xff0c;即使新建布局后却发现地图怎么却是一片空白。 这一切的一切都是因为ArcGIS Pro的功能框架完全不同&#xff0c;这里为大家介绍一下在ArcGIS Pro…

前端react入门day04-useEffect与Hook函数

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 useEffect 的使用 useEffect 的概念理解 useEffect 依赖项参数说明 useEffect — 清除副作用 自定义Ho…

Baichuan2百川模型部署的bug汇总

1.4bit的量化版本最好不要在Windows系统中运行&#xff0c;大概原因报错原因是bitsandbytes不支持window&#xff0c;bitsandbytes-windows目前仅支持8bit量化。 2. 报错原因是机器没有足够的内存和显存&#xff0c;offload_folder设置一个文件夹来保存那些离线加载到硬盘的权…

【DC-DC】APS54085降压恒流 高辉度调光降压恒流芯片

产品描述 APS54085 是一款 PWM 工作模式,高效率、 外围简单、内置功率 MOS 管&#xff0c;适用于 5-100V 输入的高精度降压 LED 恒流驱动芯片。最大电流 2.0A。 APS54085 可实现线性调光和 PWM 调光&#xff0c; 线性调光有效电压范围 0.52-2.55V. PWM 调光频率范围 100…

React Native实现QQ等级皇冠太阳星星的展示-代码示例

代码 function LevelGetImages(level: number) {let res []const marks [{ mod: 20, image: Images.setting.level_king },{ mod: 15, image: Images.setting.level_queen },{ mod: 10, image: Images.setting.level_moon },{ mod: 5, image: Images.setting.level_star },…

metinfo_6.0.0 任意文件读取漏洞复现

漏洞点为/include/thumb.php 一测&#xff1a;/include/thumb.php?dir..././http/..././config/config_db.php 二测&#xff1a;/include/thumb.php?dir.....///http/.....///config/config_db.php 三测&#xff1a;/include/thumb.php?dirhttp/.....///.....///config/conf…

geopandas 笔记:plot 的scheme

transbigdata 笔记&#xff1a;官方文档案例1&#xff08;出租车GPS数据处理&#xff09;-CSDN博客 3.3.1 节的内容的拓展&#xff0c;这里主要是比较各个scheme的效果 主代码为&#xff1a;修改的就是第二行scheme的内容 plt.figure(1,(16, 6), dpi300) schemebox_plot #图…

安装脚手架Vue CLI详解!!!

Vue CLI基本介绍&#xff1a; Vue CLI是Vue官方提供的一个全局命令工具。可以帮助我们快速创建一个开发Vue项目的标准化基础架子【集成了webpack配置】 安装脚手架好处&#xff1a; 开箱即用&#xff0c;零配置&#xff1b;内置babel等工具&#xff1b;标准化 安装步骤&#…

回馈科教,非凸科技助力第48届ICPC亚洲区决赛

1月12日-14日&#xff0c;“华为杯”第48届国际大学生程序设计竞赛&#xff08;ICPC&#xff09;亚洲区决赛在上海大学成功举办。非凸科技作为此次赛事的支持方之一&#xff0c;希望携手各方共同推动计算机科学和技术的发展。 这是一场智慧的巅峰对决&#xff0c;320支优秀队伍…

HTTP超详细介绍

HTTP讲解 1.HTTP的介绍2.HTTP协议的特点3.HTTP工作原理4.HTTP三点注意事项5.HTTP消息结构6.客户端请求消息7.服务端响应消息8.HTTP请求方法9.HTTP 响应头信息10.HTTP 状态码&#xff08;HTTP Status Code&#xff09;10.1.下面是常见的HTTP状态码10.2.HTTP状态码分类10.3.HTTP状…

【Linux系列】在Pop!OS的启动器中添加自定义程序图标

文章目录 前言一、创建快捷方式二、快捷方式参数三、添加右键菜单和注册MIME 前言 无论是在Windows上&#xff0c;还是Linux&#xff0c;或者安卓这些我们常用的操作系统上&#xff0c;一些应用程序的快捷方式放在桌面或者启动器&#xff0c;只需要简单的点击就可以启动&#…

ABAP IDOC 2 XML

有个需求&#xff0c;外围系统希望我们给到一个IDOC 记录的样例&#xff0c;但是我们we02中并无法看到 就找了一个demo去直接展示IDOC内容 *&---------------------------------------------------------------------* *& Report Z_IDOC_TO_XML *&------------…

【性能调优】local模式下flink处理离线任务能力分析

文章目录 一. flink的内存管理1.Jobmanager的内存模型2.TaskManager的内存模型2.1. 模型说明2.2. 通讯、数据传输方面2.3. 框架、任务堆外内存2.4. 托管内存 3.任务分析 二. 单个节点的带宽瓶颈1. 带宽相关理论2. 使用speedtest-cli 测试带宽3. 任务分析3. 其他工具使用介绍 本…

定制数据采集分析系统——为实现工业物联打下坚实基础

在这个工业4.0或者“工业互联网”的大背景下&#xff0c;工业物联网成为数字化转型中心舞台的一部分。数据是相关产品中的关键资产和生产资料&#xff0c;且在全球连接的产品(在整个生命周期中)的应用分析中是必不可少的功能。 工业物联网是将具有感知、监控能力的各类采集、控…

MAC相关

MAC地址&#xff0c;英文全称Medium Access Control&#xff0c;直译为介质访问控制&#xff0c;它通常被固化在每个以太网网卡&#xff08;NIC,Network Interface Card&#xff09;。MAC&#xff08;硬件&#xff09;地址长48位&#xff08;6字节&#xff09;&#xff0c;采用…

#LLMOps##AIGC# Dify_构建本地知识库问答应用-生成Al应用的创新引擎 用于构建助手API和GPT的开源开发平台

github&#xff1a; https://github.com/langgenius/dify/blob/main/README_CN.md 介绍文档&#xff1a;https://docs.dify.ai/getting-started/readme Dify 介绍 Dify 笔记 Dify 是什么&#xff1f; 开源的大语言模型&#xff08;LLM&#xff09;应用开发平台融合了后端即服…

c语言出现打印烫烫烫烫烫烫问题

系列文章目录 c语言出现打印烫烫烫烫烫烫问题 c语言出现打印烫烫烫烫烫烫问题 系列文章目录一、报错现象二、原因三、解决方法 一、报错现象 二、原因 字符数组初始化用这种方式初始化 %s是以字符串打印&#xff0c;获取是地址&#xff0c;%s会接受字符串结束标志[‘\0’]之前的…

阿里云 linux Centos7 安装 Miniconda3 + 创建Python环境

1.下载miniconda &#xff08;1&#xff09;法一&#xff1a;可以去下载清华源的miniconda镜像源&#xff0c;选择自己需要的版本&#xff0c;然后上传到Linux服务器上&#xff0c;linux上使用请选择linux版本&#xff0c;如下&#xff1a; &#xff08;2&#xff09;法二&…

日志项目1

文章目录 【C - 基于多设计模式下的同步&异步日志系统】项目介绍 前置技术1. 项目介绍2. 开发环境3. 核心技术4. 环境搭建5. 日志系统介绍5.1 为什么需要日志系统5.2 日志系统技术实现5.2.1 同步写日志5.2.2 异步写日志 6. 前置技术补充6.1 不定参函数6.1.1 不定参宏函数6…

24年地信专业各大院校,考研真题合集

2024年云南师范大学人文地理学考研真题 一、简答题 1. 人文地理学科的任务 2. 文化生态关系的类型与特点人口出生率低的影响因素现代农业的类型与特点 3. 发展中国家工业发展中存在的问题 二、分析题 1. 结合实例说明城市地域结构模型及主要动力 2. 结合实例论述区域协作组织对…