C语言指针函数和函数指针的区别?
https://www.cnblogs.com/freshman-y/p/18780981
在C语言中,“指针函数”和“函数指针”听起来相似,但它们实际上代表了两种完全不同的概念。
一、指针函数
指针函数指的是返回值类型为指针的函数。也就是说,这种函数在执行完毕后返回一个指针变量,而不是直接返回基本数据类型或结构体。
#include <stdio.h>
// 定义一个指针函数,返回一个指向int的指针
int* getStaticNumber() {
static int num = 100; // 使用static确保返回地址有效
return #
}
int main() {
int *p = getStaticNumber();
printf("指针函数返回的值:%d\n", *p);
return 0;
}
说明:
1.上面的 getStaticNumber()
函数返回一个指向整数的指针。由于局部变量在函数调用结束后可能被销毁,我们使用 static
关键字来保证变量 num
的生命周期足够长。
2.调用该函数后,通过指针 p
就能访问返回的整数值。
二、函数指针
函数指针则是指指向函数的指针变量。简单来说,函数指针可以存储某个函数的地址,通过它可以间接调用这个函数。这在需要回调、策略模式或动态函数调用时非常有用。
#include <stdio.h>
// 定义一个普通函数,用于求两个数的和
int add(int a, int b) {
return a + b;
}
int main() {
// 声明一个函数指针,指向接受两个int参数并返回int的函数
int (*funcPtr)(int, int) = add;
// 通过函数指针调用函数
int result = funcPtr(10, 20);
printf("函数指针调用返回的值:%d\n", result);
return 0;
}
说明:
1.这里的 funcPtr
是一个函数指针,它存储了函数 add
的地址。
2.通过 funcPtr(10, 20)
实现了对 add
函数的调用,获得了两个数的和。
三、主要区别
定义上不同:
指针函数:是一个函数,其返回值为指针类型,例如:int* func();
函数指针:是一个指针变量,用来存储函数地址,例如:int (*funcPtr)(int, int);
用途不同:
指针函数:用于返回指针,通常用于返回动态分配的内存地址、数组或其他数据结构地址。
函数指针:用于实现函数回调、事件驱动或动态选择调用哪个函数。
调用方式不同:
指针函数:调用后直接返回一个指针,然后可以用该指针访问相应数据。
函数指针:通过指针调用函数,可以实现类似“多态”的效果,根据具体情况调用不同的函数。
C语言指针函数和函数指针的区别?的更多相关文章
- c语言指针函数与函数指针
例一:指针函数 指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某一类型的指针 类型标识符 *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个 ...
- 【嵌入式开发】C语言 命令行参数 函数指针 gdb调试
. 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21551397 | http://www.hanshul ...
- C语言---指针变量作为函数参数
在C语言中,函数的参数不仅可以是整数.小数.字符等具体的数据,还可以是指向它们的指针.用指针变量作函数参数可以将函数外部的地址传递到函数内部,使得在函数内部可以操作函数外部的数据,并且这些数据不会随着 ...
- C语言的抽象与函数指针--思想(转)
一.何为抽象? 从小到大,我们接触到的抽象,最熟悉的莫过于数学了.为什么这样说呢? 比如说,在小学的时候,老师总是拿了几个苹果来引诱我们:同学们,这里有几个苹果啊?于是我们流着口水一个个地数,一个苹果 ...
- C语言 命令行参数 函数指针 gdb调试
. 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21551397 | http://www.hanshul ...
- C语言 函数指针一(函数指针的定义)
//函数指针 #include<stdio.h> #include<stdlib.h> #include<string.h> //函数指针类型跟数组类型非常相似 / ...
- 深入浅出剖析C语言函数指针与回调函数(一)【转】
本文转载自:http://blog.csdn.net/morixinguan/article/details/65494239 关于静态库和动态库的使用和制作方法. http://blog.csdn. ...
- C语言指针系列 - 一级指针.一维数组,二级指针,二维数组,指针数组,数组指针,函数指针,指针函数
1. 数组名 C语言中的数组名是一个特殊的存在, 从本质上来讲, 数组名是一个地址, 我们可以打印一个指针的值,和打印一个数组的值来观察出这个本质: int nArray[10] ={ 0 }; in ...
- C语言随笔5:函数、函数指针
函数 C语言中函数参数传递时,将实参的值拷贝到函数参数的存储区中.这种传递参数的方式称为按值传递. 函数不会访问实参本身,访问的是函数存储在栈区的副本,不会改变实参.函数凋用结束,函数在栈区的内容释放 ...
- C语言回顾-内存管理和指针函数
1.fgets()函数 该函数是一个文件操作相关的函数 暂时使用这个函数可以从键盘上接收一个字符串,保存到数组中 char str[50]; 1)scanf("%s",str);/ ...
随机推荐
- 'invalid flag in #cgo LDFLAGS: -w' 问题解决
当我们在go项目中使用C库,或者引用的第三方库有使用C库,有时候会遇到 invalid flag in #cgo LDFLAGS: -w 这种错误. 这是因为在项目代码中,使用了#cgo指令符(dir ...
- C# 相等比较
C# 相等比较 有两种类型的相等: 值相等:即两个值是一样的 引用相等:即引用是一样的,也就是同一个对象 默认地,对于值类型来讲,相等指的就是值相等:对于引用类型,相等就是指的引用相等. int a ...
- 从零开发Vim-like编辑器(01)起步
前言 Vim和Neovim因其独特的模态编辑和高度可定制化,被列为程序员常用的文本编辑器选项之一,与Sublime Text.VS Code.Emacs等编辑器共同丰富了开发者工具生态.就目前而言,网 ...
- 使用Streamlit构建批量二维码生成器
Streamlit是一个优秀的Python库,让数据科学家和开发者能够快速创建交互式Web应用.今天,我将展示如何使用Streamlit和qrcode库构建一个简单而实用的批量二维码生成器. 技术栈 ...
- P8842 [传智杯 #4 初赛] 小卡与质数2
传送门 变态数学题(主考位运算与素数筛). 读完题看起来有点难做,因为质数的出现是根本没有可以使用的规律.暴力的话也很好想,枚举 $y$.但是肯定会超时.我们也可以换个方向枚举.对,筛出素数,再返过去 ...
- 刚刚 B站又血崩了?!我来告诉你真正原因
B 站又双叒叕崩了,这次是真炸裂了!6 月 12 日晚 9 点左右,我还在直播呢,突然就看到弹幕都在说 B 站炸了,我立马坐不住了,光速下波,作为一名前大厂程序员,就爱吃大厂的瓜,就爱吃同行的瓜,吃瓜 ...
- Opencv学习:使用Opencv对图象进行抠图和滤镜处理,实现“你的名字”动漫图片效果
最近接到了一个坑爹题目,是这么要求的: 仿照 <你的名字>,对天坛图像.src.jpg进行处理.要求 (一)背景(天空)分割,替换后再融合 在自然界的图片中,很难出现动漫中大多大多的云彩. ...
- DotTrace系列:5. 诊断程序的 慢File 和 慢SQL
一:背景 1. 讲故事 上一篇跟大家聊到了 UI Freeze 的问题,让大家感受到了时间轴的强大和美观,这个是 perfview 所不具备的,本篇跟大家聊一下用 dottrace 诊断Windows ...
- MKL库线性方程组求解(LAPACKE_?gesv)
LAPACK(Linear Algebra PACKage)库,是用Fortran语言编写的线性代数计算库,包含线性方程组求解(\(AX=B\)).矩阵分解.矩阵求逆.求矩阵特征值.奇异值等.该库用B ...
- .Net Core WebApi 版本控制
https://www.cnblogs.com/xhubobo/p/14445511.html 使用过程参考:在ASP.Net Core Web API中使用Swagger,本文在此基础上阐述如何进行 ...