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);/ ...
随机推荐
- No grammar constraints (DTD or XML schema) detected for the document
warning: No grammar constraints (DTD or XML schema) detected for the document 未检测到文档的语法约束(DTD或XML模式) ...
- jdk8下载地址(附赠安装包)
jdk下载地址:https://jdk.java.net/ (文末已经为大家下好了,放在网盘里) 进去后点8,win. 安装好后,使用java -version命令如下: 成功安装jdk! 为大家提供 ...
- Go中的map和指针
本文参考:https://www.liwenzhou.com/posts/Go/08_map/ MAP(映射) Go语言中提供的映射关系容器为map,其内部使用散列表(hash)实现.(类似于Pyth ...
- 关于Node.js 构建中遇到node-gyp报错问题的解决方案记录
项目今天进行版本更新,在走阿里云流水线的时候,出现了Node.js 构建过程报错问题,抱歉详情截图如下: 经过反复排查,最终发现是因为阿里云的npm仓库的问题,于是果断更换npm仓库,执行命令如下: ...
- ChatMoney,分析梦境的大师
本文由 ChatMoney团队出品 作为一个爱幻想爱做白日梦的 i人,我常常就在想,什么时候能利用Al来帮助我找回一些被遗忘的.或者模糊不清的记忆? 有没有可能进入别人的梦境里瞧一瞧? 为什么世界上还 ...
- UFT 的三种方法获取时间
- Kafka入门实战教程:学习总结目录索引
0 Kafka学习路径 在学习Kafka的途中,我总结了一个系列的Kafka学习征途系列教程,它只选取了我认为最实用的部分整理出来,以及结合我最熟悉的.NET技术栈进行了演示. 而一些我觉得在实际中用 ...
- 插件报错:SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“.解决方案
今天在用Maven搞一个工程,安装要求我添加了所有需要的依赖,可是一运行测试程序,就跳出这样一个大大的错误: SLF4J: Failed to load class "org.slf4j.i ...
- SpringMVC三层结构
Java SpringMVC的工程结构一般来说分为三层,自下而上是Modle层(模型,数据访问层).Cotroller层(控制,逻辑控制层).View层(视图,页面显示层),其中Modle层分为两层: ...
- XSY3490 / ZROI P618 广义线段树 + 莫队 + 点分树
\(Solution\) 为了与普通区间区分,我们称线段树上某个结点 \([l, r]\) 为 块 \([l, r]\) 考虑模拟线段树区间查询 \([l, r]\) 时下放到的底部端点,必然是一堆连 ...