C语言之函数、指针、数组二重奏

高校技术转移办公室人员如何提升技术成果的市场化对接效率?.docx 高校技术转移办公室人员如何提升技术成果的市场化对接效率? 立即下载

什么是数组指针,什么是指针数组?

什么是函数指针?什么是指针函数?

说说经常让人晕头转向的**指针、指针**

先声明:()、[] 的优先级大于*

指针**:(指针函数和指针数组)

指针函数:本质上是个函数,其返回值为指针,如: int* fun()

指针数组:依然是个数组,不过数组中的元素全是指针,即“XX的地址”如int* arr[10];

**指针:(函数指针和数组指针)Pay  Attention

函数指针:本质上是个指针,该指针指向函数的入口地址;编译时编译器会为每个函数分配一个入口地址,这个入口地址其实就是该函数中第一条指令的地址,即为函数的指针。

声明形式为:函数类型(*指针变量名)();使用之前必须提前声明

如:int (*pFun)(int,int);

//pFun就是一个指针变量,指向一个返回值为int的函数,该函数有两个int形参

//pFun的类型为int(*)(int,int)

函数原型为:int Fun(int,int)

函数指针的赋值:pFun=Fun或者pFun=&Fun,即可将pFun指向函数Fun的地址;编译器会自动将Fun转化为&Fun;

使用函数指针调用函数原型:使用(*pFun)(实参1,实参2)或者pFun(实参1,实参2)来调用函数Fun;编译器会自动将pFun转化为(*pFun)。

函数指针最常用的地方就是作为参数传递给其他函数,来实现回调,即在运行时决定调用哪个函数原型,来实现动态绑定;感觉就像C++中用虚函数来实现运行时绑定的机制。

例如

void fun1(int a){...}

void fun2(int b){...}//回调函数

void callFun(int,void(*pfun)(int)){...}//函数内使用pfun调用

call:   callFun(实参,fun1);

          callFun(实参,fun2);//运行时动态决定调用fun1或者fun2

数组指针:本质依然是指针,其指向一个数组,与函数指针类似。

如:int (*pArr)[N];

//pArr为一个指针变量,指向一个大小为N的int型一维数组,pArr即为数组元素的首地址。同时需要注意的是,pArr的步长也为N,即执行pArr+1时,实际上将pArr当前指向的地址+N*sizeof(int),pArr跨度为N个int型元素。

例如:

int calendar[12][31];//定义一个日历数组
int (*pMonth)[31];//pMonth为数组指针
//遍历整个日历
//pMonth为calendar的首地址,即为calendar[0]或者&calendar[0][0]
for(pMonth=calendar;pMonth<&calendar[12];pMonth++)
{ 

    int* pDay;//指向天数组(int [31])的指针,即指向*pMonth
    for(pDay=*pMonth;pDay<&(*pMonth)[31];pDay++)
                *pDay=0;//happy每一天
}


无论是函数指针还是数组指针,其本质都是个指针变量,只不过所指向的内容不同;无论是指针函数还是指针数组,其本质都未改变,只不过存储的内容为指针。有没有发现,其本质依然是其名称的后两个字。

最后想说说函数参数传递的方式,指针无非就是0x12345678之类的地址值。而C语言中函数参数传递的方式只有一种,那就是传值,有人可能会辩解还有传指针啊,殊不知指针(地址)本质上其实也是值,依然是传值,只不过我们可以通过传递指针来改变某些内容。引用是C++才引入语言特性。

当采用传值方式时,在函数内会拷贝传递的实参,操作的是实参的副本,而不会直接跟实参打交道,即不会改变实参的值;当传递一个指针时,函数内同样会拷贝该指针的值,我们不能改变该指针本身的值(0x12345678),但是可以通过操作该指针来改变指针所指向的内存单元中的值。所以,传递指针本质上还是传值的方式。

而C++中的引用只是变量的别名,引用不是值,不占用内存空间,即引用只能有声明,不能有定义,而且声明时就必须初始化,一旦初始化便不能更改,不存在空引用。函数形参中传递引用时不会拷贝实参建立副本,而是直接操作实参原值。



国央企创新负责人如何通过平台实现科技成果的定向匹配与快速转化?.docx 科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。 立即下载

相关推荐

端口测试软件Windows

端口测试软件Windows

函数指针(113-116)

113-116. 函数指针笔记:基础知识 注意类型 两种写法是一个地址 不能计算函数指针所指之物的大小,也不能对其进行加1操作 代码: 加减乘除:查表调用函数,开户、存款。 泛型打印,快排 泛型算法:结构体​​​​​​​比较,打印...

qq_42939980的博客 190

Java编程MVC架构下的Web开发示例

内容概要:本文通过一个“用户管理”功能的开发实例,详细展示了MVC(Model-View-Controller)架构在Web开发中的具体应用。文章将系统划分为三层:Model负责数据与业务逻辑,View专注于页面展示,Controller处理请求并协调前后端交互。通过手写Servlet + JSP的传统方式实现MVC,帮助读者深入理解分层原理和请求流转过程,包括数据传递、视图渲染与重定向机制。同时简要对比了Spring MVC的实现差异,突出传统实现对架构本质的清晰呈现。示例采用内存模拟数据库操作,简化环境依赖,便于学习。 适合人群:具备Java基础和基本Web开发知识,工作1-3年的后端研发人员或学习中的计算机专业学生。 使用场景及目标:①掌握MVC架构的核心思想与分层职责划分;②理解Servlet如何作为控制器处理HTTP请求与响应流程;③学习JSP与JSTL在视图层的数据渲染与安全防护(如XSS防御);④为后续学习Spring MVC等现代框架打下扎实基础。 阅读建议:建议动手实践文中代码,结合调试观察请求流程与数据流向,重点关注各层之间的协作关系及PRG模式的应用,以加深对Web应用整体结构的理解。

汇编学习 - 汇编分类和mov、call指令

汇编分类   汇编语言种类大致可以分为:8086汇编(16bit)、x86汇编(32bit)、x64汇编(64bit)以及嵌入式汇编等。根据书写格式的不同可将汇编分为:Intel汇编和AT&T汇编。GCC编译器中默认使用的是AT&T汇编,两种格式的差异如下: 寻址方式的差异如下: 寄存器   寄存器是cpu中的数据存储区域,cpu会先将内存中的数据存储到寄存器,再对寄存器中的数据进行运算。不同种类的汇编码中,寄存器也是不一样的,以最常用的几个通用寄存器为例:在64 bit汇编下的rax、

zhugl的博客 5925

文旅酒店业AI知识库平台规划方案(生态合作版).pptx

文旅酒店业AI知识库平台规划方案(生态合作版).pptx

两相交错并联Boost电路仿真模型(Simulink仿真实现)

内容概要:本文详细介绍了两相交错并联Boost电路的Simulink仿真模型,属于电力电子变换器领域的核心技术研究。该模型基于Simulink平台构建,重点在于通过多相交错并联结构提升Boost电路的输出稳定性与转换效率,有效降低输入电流纹波,适用于中高功率电力变换场合。文档系统阐述了电路的工作原理、闭环控制策略设计、软启动机制实现以及关键参数的优化方法,充分展现了多相并联技术在改善动态响应、提高功率密度方面的优势。同时,提供了完整的仿真建模流程和技术路线,涵盖主电路搭建、控制器设计、系统调试与性能分析等环节,并配套提供仿真文件、设计报告及参考文献等丰富资料,便于学习者深入理解与实践复现。; 适合人群:具备电力电子技术基础知识、熟悉Simulink仿真环境,正在从事新能源发电、电动汽车、工业电源系统等相关领域研究的硕士博士研究生、科研人员及电气工程方向的工程技术人员。; 使用场景及目标:①用于深入理解多相交错并联Boost电路的拓扑结构与工作机理;②支撑科研项目中的高效DC-DC变换器性能验证与优化设计;③为实际电源产品开发提供理论依据和仿真原型;④作为高校课程设计或实验教学的参考案例,提升学生的工程仿真与系统分析能力。; 阅读建议:建议结合文档中提及的其他相关变换器模型(如LLC谐振变换器、PFC电路、Buck变换器等)进行横向对比学习,深入掌握不同拓扑的控制策略差异与适用场景,并充分利用所提供的网盘资源下载完整仿真模型,动手调试参数、观察波形,从而深化对多相并联控制、电流均流、闭环稳定性等关键技术的理解,全面提升电力电子系统的仿真与设计能力。

C++内存管理核心:new/delete与构造析构调用机制详解

内存管理是C++编程的核心基础,它直接关系到程序的稳定性和性能。其原理在于将内存分配与对象生命周期管理紧密结合,通过构造函数和析构函数确保资源的正确初始化和释放。这一机制的技术价值在于提供了对系统资源的精细控制能力,是实现高性能、低延迟系统的关键。在实际应用场景中,无论是开发游戏引擎、数据库系统还是嵌入式软件,都需要深入理解内存管理机制以避免程序崩溃和资源泄露。本文聚焦于C++中new和delete操作符如何触发自定义类型的构造函数和析构函数,深入解析了内存分配、对象构造、资源释放的完整调用链,并探讨了拷贝

weixin_33725807的博客 547

夜晚监控场景下老鼠检测数据集VOC+YOLO格式3961张1类别.md

【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 优快云 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 优快云 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 优快云 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 优快云 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。

秩序重组与逻辑迷宫:数组合并与布尔运算的算法交响曲

合并排序的数组是空间拓扑学的典范——它证明:通过巧妙的指针逆向行走,物理空间约束可转化为有序重组的优势。布尔运算则是组合数学的瑰宝,揭示括号化方案数与布尔代数间的深刻联系(卡特兰数在表达式括号化的推广)。二者共同诠释算法设计的核心法则:"所有高效都是约束的艺术,所有组合都是结构的舞蹈"在量子计算时代,这些思想延伸至量子比特操作(合并思想→量子态叠加)和量子门优化(布尔运算→量子电路合成)。物理重组教会我们:在约束中寻找最优路径逻辑分解启示我们:在混沌中发现隐藏结构。

司徒鸿的博客 803

电动车检测数据集VOC+YOLO格式3015张1类别.md

【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 优快云 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 优快云 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 优快云 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 优快云 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。

无人机视角建筑物楼房外立面缺陷剥落裂缝检测数据集VOC+YOLO格式1263张2类别.md

【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 优快云 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 优快云 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 优快云 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 优快云 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。

C++内存管理:从new/delete原理到现代智能指针实践

内存管理是程序运行的核心基础,它决定了数据在计算机内存中的存储、访问与释放方式。其原理涉及操作系统对内存资源的分配策略,直接影响程序的性能与稳定性。在C/C++领域,内存管理技术尤为关键,它不仅是底层系统编程的基石,也是优化高频操作、避免内存泄漏的核心手段。从早期的malloc/free到C++的new/delete,再到现代智能指针,内存管理技术不断演进,旨在平衡灵活性与安全性。这些技术广泛应用于高性能计算、游戏引擎、嵌入式系统等对资源控制要求极高的场景。本文聚焦C++内存管理,深入解析new与delet

weixin_30267785的博客 459

【BAAS】基于supabase的知识库详细设计

为满足快速开发需要和减少开发及维护成本,使用BAAS(Backend-as-a-Service)模式可以很好的降低我们的后端维护成本,并提高前端对接效率。一般来说,BAAS是一种云服务模式,BaaS供应商会为提供一些通用的能力,例如用户身份验证、数据库管理、远程更新和推送通知(针对移动应用程序),以及云存储和自托管。BaaS最主流的是Google的firebase,具有相当完善的功能和集成方案,但他是收费的,而且在我们实际项目中,可能需要私有化部署,这时就需要一些开源的替代方案,例如主流的。

Ric的博客 1781

所有博客导航

。。

nameofcsdn的博客 1万+

私募pp网-私募排行js逆向

在数据采集的学习过程当中,发现了一个有意思的网站,所以记录一下,仅供学习交流,用于其他用途与作者无关。目标:私募基金当中的列表页数据。

zzp28218的博客 1896

使用 NTLite 来定制专属的官方 windows 镜像

移除掉不想要的一些自带的应用,比如 Xbox,office 啥的,这个就根据自己的实际需求来选择,备注基本都是有解释这个应用的作用。win 11 的右键展示不喜欢,更喜欢 win10 的,但是需要修改注册表,这里直接把下面的命令写到后期任务里面。NTLite 的自动保存会话功能会保留操作过的配置,是一个 xml 文件,可以在下次升级镜像版本的时候,导入配置。关闭 windows defender,不关会有这个提示,点是,就会跳到对应的界面。勾选创建 iso,配置 iso 镜像的名字,然后点开始。

以梦为马|越骑越傻 3336

冒泡排序及其改进算法C语言实现

#include #include //冒泡排序 void BubbleSort(int *array,int n) { int temp; for (int i=n-1;i>0;i--) { for (int j=0;j<i;j++) { if (*(array+j)>*(array+j+1)) { temp=*(array+j)

大道至简 2328

游戏玩家和排行数据抓取:使用 Python 爬虫抓取游戏中的玩家排名、角色数据和战绩

对于游戏开发者、分析师和玩家本身来说,抓取游戏中的玩家排名、角色数据和战绩信息是一项至关重要的任务。Python提供了强大的爬虫库和数据处理工具,可以帮助我们高效地抓取和分析游戏数据,为游戏分析师、开发者以及玩家本身提供有价值的数据支持。通过本篇博客,我们学习了如何使用Python爬虫技术抓取游戏中的玩家排名、角色数据和战绩。本篇博客将详细介绍如何使用Python编写爬虫来抓取游戏中的玩家排名、角色数据和战绩,并结合最新的技术来实现高效的数据抓取与处理。为了方便后续的数据处理,我们将抓取的数据保存到。

2201_76125261的博客 946

循环队列C语言实现

//循环队列,以数组作为存储结构,C语言实现 #include "stdafx.h" #include //定义队列数组大小 #define QUEUESIZE 10 //定义循环队列结构体 typedef struct _CycleQueue { int front;//队首 int rear;//队尾 int count;//队列中元素个数 int data[QUEUESIZE]

大道至简 1808

UDF学习(四)FLUENT UDF-DEFINE_PROFILE宏

利用DEFINE_PROFLILE可以指定以下边界或计算域信息:DEFINE_PROFILE(name,t,i)//既可以用。

weixin_44386973的博客 1806

ESP32学习笔记06-UART 的485 通讯模式

通信方式选择UART 控制器支持多种通信模式,使用函数 uart_set_mode() 可以选择模式。选择特定模式后,UART 驱动程序将处理已连接 UART 设备的相应行为。例如,主机开始向 Tx FIFO 缓冲区写入数据时,UART 驱动程序会自动置位 RTS 管脚(逻辑 1);最后一位数据传输完成后,驱动程序就会取消置位 RTS 管脚(逻辑 0)。要使用此模式,软件。

Car12 2476

C语言之声明和定义

1、先说“声明”和“定义”的区别:(这里的对象泛指函数、变量等) “声明”只是简单地告诉编译器在其他地方创建的对象的名字,允许你使用这个名字,并不分配内存空间,以extern关键字标识。 “定义”是一种特殊的声明,它在声明的同时告诉编译器为对象分配内存空间。C语言的对象必须有且只有一个定义,但可以有多个extern声明。 定义 只能出现在一个地方 确定

大道至简 677

ABAP CDS SELECT, parameters 全面解析:把参数化视图玩明白(含可运行示例)

这篇技术博客介绍了ABAP CDS中参数化视图的用法与实践。文章从业务需求出发,解释了参数化视图的必要性,并详细说明了语法规则、参数类型匹配、视图内部参数引用等关键点。重点展示了在JOIN和ASSOCIATION中传递参数的写法,提供了航线分析的完整业务案例和可运行代码示例。文章还总结了视图实体与DDIC视图的差异、会话变量使用技巧等实践要点,特别强调了JOIN中必须显式传参的语法要求。通过真实场景演示,帮助开发者掌握参数化CDS的高效应用。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 364

一、数据结构基础之顺序表C语言实现

/* * 一、数据结构基础之顺序表 * 顺序表数据结构(结构的定义+在此结构上的操作) * --- 2012年4月21日 ---by lx */ #ifndef _SEQUENTIAL_LIST_H #define _SEQUENTIAL_LIST_H #include "Utility.h" //宏定义顺序表的空间大小 #define LISTSIZE 20 //类型定义

大道至简 658

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: Ubuntu安装和卸载软件包常用命令
下一篇: C语言之声明和定义
sharelx
博客等级 码龄15年 5粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值