函数指针 和 指针函数

从零部署DeepSeek V4 Flash:NVIDIA DGX Spark实战指南 GPU加速计算已成为现代人工智能基础设施的核心,其原理是通过并行处理架构大幅提升深度学习模型的训练与推理效率。在AI工程实践中,NVIDIA GPU凭借CUDA生态和专用驱动栈,为大规模语言模型部署提供了硬件基础。本文聚焦于企业级AI服务器部署场景,针对NVIDIA DGX Spark多节点系统的硬件初始化、驱动兼容性配置、容器化部署等关键环节,提供从系统层到应用层的完整解决方案。通过vLLM推理框架的实战配置,演示如何将DeepSeek V4 Flash模型高效部署于多GPU环境,涵盖Tensor Par 阅读详情
在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了。





10.2 在新能源、储能及电网节点的应用实践 构网型变流器技术在电力系统中的应用进展 构网型变流器技术正从理论研究走向规模化工程应用,为新能源并网提供主动支撑能力。该技术在光伏电站采用"部分构网"混合架构,由构网单元实现黑启动和弱网稳定;在风电场利用叶轮动能提供惯量响应。储能系统是理想的构网载体,可提供快速调频和动态电压支撑。在电网节点,构网型STATCOM可增强弱电网电压稳定性,大容量变流器可替代传统调相机。当前面临标准滞后、宽频振荡风险等共性挑战,需在可靠性、经济性间取得平衡。系统级协调控制和精确阻抗建模是应用成功的关键。 阅读详情

相关推荐

GenomeSurvyIndex设计--随笔017

摘要: GenomeSurvyIndex是一款自动化多倍体基因组调查工具,整合FastK、Smudgeplot和GenomeScope2.0三大核心组件。该工具通过k-mer频谱特征自动识别基因组倍性类型,包括二倍体(1:2:4)和同源四倍体(1:2:3:4),并采用3a1b>2a2b算法判定同源/异源多倍体。工具提供完整的conda环境配置方案,封装为Python脚本实现全流程自动化分析,包含k-mer计数、倍性判定、基因组特征计算等功能,最终输出标准化报告和可视化图表。该方案可直接部署使用,适用于

weixin_44874487的博客 473

空指针与函数指针

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

嘿嘿嘿呼呼嘿 4341

【WorkBuddy】WorkBuddy 智能体快速上手:从零到一的实践指南

文章摘要: 传统自动化脚本难以应对灵活多变的自然语言需求,导致逻辑复杂、维护成本高。智能体(Agent)通过理解语义意图、动态决策和松耦合组件解决了这些问题。WorkBuddy采用声明式配置,通过可视化界面定义意图、实体和对话策略,无需编码即可快速构建智能体。其核心组件包括意图分类、实体提取、对话策略、故事样本和回退机制,适用于客服支持、知识问答等高频场景。通过环境准备(Python/Node.js/Redis)和简单配置,用户可以快速搭建可运行的智能体,显著提升自动化效率。

ruiqideng的博客 1597

空指针、void指针与函数指针

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

chaoshui7758的博客 2447

MATLAB新手必看:Stewart平台运动学逆解从入门到实战(附完整代码)

本文详细介绍了如何使用MATLAB实现Stewart平台的运动学逆解,从基础原理到完整代码实现,涵盖并联机器人的数学建模、MATLAB编程和Simulink集成。通过实战案例和可视化分析,帮助新手快速掌握Stewart平台的运动学逆解技术,适用于机器人学和控制理论领域的研究与应用。

dream的博客 551

PostgreSQL使用 pg_rman物理备份搭建流复制备库(streaming replication standby)

摘要:使用pg_rman备份搭建PostgreSQL流复制备库 本文详细介绍了利用pg_rman工具快速搭建PostgreSQL流复制备库的完整流程。该方法结合物理备份的高效性和流复制的实时性,特别适合大型数据库环境。主要内容包括:主库上的pg_rman安装配置、全量备份操作;备份文件传输至备库;备库数据目录准备及恢复;流复制参数配置;以及最终的启动验证步骤。文章还提供了架构示意图和关键配置示例,并包含常见问题排查建议,如备库无法启动或复制卡顿情况的处理方法。整个流程强调通过.pgpass文件管理密码的安全

liumangtuzi888的博客 1168

C语言函数指针与NULL

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

fish的专栏 3231

matlab 图像合成_用MATLAB做图像合成加雾的处理

众所周知,现在有很多算法来对图像进行去雾处理。但反之,对图像增加雾的代码却少之又少,本代码就是基于Matlab实现了对图像的加雾处理。该方法可用做雾天图像的合成数据集。代码公开如下:clear;clc; % close all; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%i...

weixin_35719260的博客 2060

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的博客 584

手把手教你为RK3588开发板适配RTL8211F网卡:设备树配置与PHY驱动匹配全流程

本文详细介绍了在RK3588开发板上适配RTL8211F千兆以太网PHY芯片的全流程,包括硬件原理图确认、设备树配置与PHY驱动匹配。通过实战案例和调试技巧,帮助开发者解决常见问题并优化网络性能,适用于嵌入式Linux开发中的Ethernet网络功能实现。

weixin_29184075的博客 525

Synares病毒实战:如何从U盘感染中恢复你的Excel和EXE文件(附专杀工具推荐)

本文详细介绍了Synares感染型病毒的典型特征与传播机制,特别是其通过U盘感染Excel和EXE文件的行为。文章提供了一套从应急隔离、诊断到使用专杀工具进行深度清除与文件恢复的完整实战流程,并推荐了有效的安全软件和修复方法,旨在帮助用户最大程度救回重要数据并构建长效安全防护习惯。

weixin_29230649的博客 1808

C++ 函数指针和指针函数

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

m0_52902391的博客 5186

大模型——Ollama简明教程

在这篇文章中,我们将了解如何使用 Ollama、如何在 Ollama 中创建自己的模型 以及如何使用 Ollama 构建聊天机器人。这是深入研究 Ollama 的第一部分,以及我所学到的有关本地 LLM 的知识以及如何将它们用于基于推理的应用程序。在这篇文章中,你将了解——

1683

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

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

一丁的博客 2986

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

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

指针函数 指针函数, 即返回值为指针的函数, 本质上是一个函数, 我们先看下面实例: #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的博客 5353

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

指针函数和函数指针

指针

xc_123的博客 6725

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

函数指针和指针函数

函数指针和指针函数

弘毅_hao的博客 5126

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

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

人生得意须尽欢 584

C语言函数指针和指针函数

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

AnChenliang_1002的博客 2043

函数指针和返回函数指针的函数

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

cuoxin123的博客 1517

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

文章目录指针函数函数指针 指针函数 指针函数本质是一个函数,返回值是某一类型指针 写法如下: 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的博客 3411

指针函数和函数指针的区别

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

千千道的博客 966

指针函数和函数指针 函数指针数组 回调函数

我们经常使用的函数定义的方式是(类型名 标识符 (形参列表) {函数体})指针函数的定义其实也并无不同,我们定义的方式也是(类型名 标识符 (形参列表) {函数体})只不过使用的是指针类型。int* ret(int x,int y) {} 或者 int *ret(int x,int y) {}怎么去写看个人习惯,并无区别。这么看来其实也是比较简单,和普通函数的定义并没有什么大的区别,也就是多了一个* ,仅此而已。

C++领域内容分享 389

函数指针和指针函数,函数指针数组

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

sunhy1021的专栏 1426
上一篇: 分析 BOOL & bool
下一篇: 结构体字节对齐
SingleCode
博客等级 码龄15年 11粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值