C语言指针函数和函数指针区别
转载自:https://blog.csdn.net/qq_43710979/article/details/88030147
C语言函数指针和指针函数的区别
C和C++中经常会用到指针,和数据项一样,函数也是有地址的,函数的地址是存储其机器语言代码的内存的开始地址。
指针函数和函数指针经常会混淆,一个是返回指针的函数,另一个是指向函数的指针,下面就分别解释指针函数和函数指针的区别。
一、指针函数
指针函数是 返回指针的函数 主体是函数,返回值是一个指针
基本声明形式:返回数据类型 + * + 函数名 + (变量类型1,…);
e.g :
int* fun(int,int);
int * fun(int,int);
int *fun(int,int);
这三种声明都可以,第一种更加直观 返回值是 int* 类型
举个栗子:
#include<stdio.h>
int* fun(int* x) //传入指针
{int* tmp = x; //指针tmp指向xreturn tmp; //返回tmp指向的地址
}
int main()
{int b = 2; int* p = &b; //p指向b的地址printf("%d",*fun(p));//输出p指向的地址的值return 0;
}
输出结果:2
二、函数指针
函数指针是 指向函数的指针 主体是指针 指向的是一个函数的地址
基本声明形式:返回数据类型 + (*函数名) + (变量类型1,…);
注意 * 和函数名要用括号括起来,否则因为运算符的优先级原因就变成指针函数了
e.g:
int (*fun) (int);
#include<stdio.h>
int add(int x,int y)
{return x + y;
}
int (*fun) (int,int); //声明函数指针
int main()
{fun = &add; //fun函数指针指向add函数printf("%d ",fun(3,5)); printf("%d",(*fun)(4,2));return 0;
}
输出结果:8 6
上面的样例中,使用函数指针时使用fun(3,5)和(*fun)(3,5)都可以
函数指针的参数列表要和函数指针指向的函数的参数列表一致
主要记住指针函数是返回指针的函数而函数指针是指向函数的指针
在这个基础上可以有函数指针函数和指针函数指针之类的
指针函数声明的时候 * 和函数名不需要括号括起来
函数指针声明的时候 * 需要和函数名用括号括起来(优先级原因)
————————————————
版权声明:本文为CSDN博主「Kria·L」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43710979/article/details/88030147
以上是函数指针和指针函数的区别,下一篇将讲解函数指针数组。
C语言指针函数和函数指针区别相关推荐
- c语言指针自定义函数,c语言函数指针定义,指针函数和函数指针的区别
往往,我们一提到指针函数和函数指针的时候,就有很多人弄不懂.下面就由小编详细为大家介绍C语言中函数指针,指针函数和函数指针之间的区别. c语言指针函数定义: 函数指针是指向函数的指针变量. 因此&qu ...
- C语言基础知识之define宏定义表达式,undef,内存对齐,a和a的区别,数组知识点,int (*)[10] p,二维数组参数与二维指针参数,函数指针数组,常见的内存错误及对策
一.用define宏定义表达式 1.定义一年有多少秒: #define SEC_A_YEAR 60*60*24*365 //上述描述不可靠,没有考虑到在16位系统下把这样一个数赋给整型变量的时候可能会 ...
- 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)
相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...
- typedef函数指针_C语言函数指针之回调函数
1 什么是回调函数? 首先什么是"回调"呢? 我的理解是:把一段可执行的代码像参数传递那样传给其他代码,而这段代码会在某个时刻被调用执行,这就叫做回调. 如果代码立即被执行就称为同 ...
- C语言学习笔记---指向函数的指针
在内存中函数的存放也是一段连续的内存,函数名就是指向改内存中的首地址,所以也可以将这个函数的首地址赋给一个指针变量,这样通过指针变量就可以访问改函数. 那么为什么要通过指针来访问函数呢?下面通 ...
- C语言指针(函数指针数组,二级指针)
int (*p[num])( char*,int,int );int (*(*p)[num])(int a); 上一篇博客最后的两个例子的答案分别是:函数指针数组,函数指针数组的指针. 函数指针数组指 ...
- c语言指针与函数ppt,函数与指针C语言.ppt
函数与指针C语言.ppt 函数与指针 第7章 7 1概述 第7章 1 按功能划分模块划分模块的基本原则是 各模块都要易于理解 功能尽量单一 模块间的联系尽量少 满足这些要求的模块具有以下优点 7 1 ...
- 详解C语言指针函数、函数指针、函数指针数组
在C语言中,指针是一个很重要但是又很容易弄错的概念,也可以说指针就是C语言的灵魂,所以说学好指针对于完全掌握C语言是一个必须的过程.而在指针中,指针函数.函数指针.指针函数数组.函数指针数组.指向函数 ...
- 【C 语言】一级指针 易犯错误 模型 ( 判定指针合法性 | 数组越界 | 不断修改指针变量值 | 函数中将栈内存数组返回 | 函数间接赋值形参操作 | 指针取值与自增操作 )
文章目录 一.判定指针合法性 二.数组越界 三.不断修改指针变量值 四.函数中将栈内存数组返回 五.函数间接赋值形参操作 六.指针取值与自增操作 一.判定指针合法性 判定指针合法性时 , 必须进行如下 ...
- 【嵌入式开发】C语言 命令行参数 函数指针 gdb调试
. 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21551397 | http://www.hanshul ...
最新文章
- linux汇编div除法,汇编:div 除法指令
- 浅谈新一代Android操作系统Android L
- 70条WB, IHC常见实验问题解决方案汇总
- pkl格式数据 训练集_Detectron2训练自己的数据集手把手指导
- Spoken English Practice (I'm having whatever you're having)
- jedis开发过程中遇到的问题及其解决方法
- C++ 泛型编程-函数模板
- c语言运动员成绩查询,运动会成绩管理系统
- php掷骰子小游戏代码,C语言实现掷骰子游戏代码及解析
- 如何在Word中快速制作组织结构图?没想到可以如此简单
- Redis持久化策略AOF、RDB详解及源码分析
- “只取一瓢饮”的读书
- HDU 5698 	瞬间移动 (2016百度之星 - 初赛(Astar Round2B) 1003)
- 应用市场无法连接服务器怎么办,无法连接到app store是什么原因?苹果应用商店打不开的解决方法...
- 双摄像头做slsm_刚刚考完!真实双机位复试经验帮你避雷!
- 【浏览器】浏览器安全
- nxn次方求和函数_算法|小学生都能看懂的生成函数入门教程
- java之利用行列式展开法,计算行列式的值
- 从WAVE SUMMIT+2021,寻找新一代AI人不可或缺的“凝视”
- 珂朵莉与妖精仓库的妖精们
热门文章
- miniusbpcb封装_MINI MICRO A型B型D型USB多类型Altium AD元件库 PCB封装库的电路方案详解...
- appium历史版本下载
- UDS诊断协议规范与要求
- Java常用软件安装包分享
- 身份证前6位对应的省市区县
- 《FLUENT 14流场分析自学手册》——1.3 附面层理论
- win10蓝牙开关不见了_来自德国,比JBL更硬汉,这款户外蓝牙音箱,上得厅堂下得厨房...
- OpenDDS应用开发步骤
- ASCLL码对照表02(可显示字符)
- 西宁公交调度员招聘计算机题库,调度员考试题库.doc