C语言基础知识:函数指针&指针函数(定义格式、作用及用法说明)[通俗易懂]

C语言基础知识:函数指针&指针函数(定义格式、作用及用法说明)[通俗易懂]版权声明:本文为博主原创文章,未经博主允许不得转载。https://mp.csdn.net/postedit/83150266一、函数指针的实质(还是指针变量)1、函数指针定义格式:类型名 (*函数名)(函数参数列表);int(*pfun)(int,int);2、函数指针的定义、赋值、调用voidfunc1(void)//定义一个函数,以方便下面定义函…

大家好,又见面了,我是你们的朋友全栈君。

版权声明:本文为博主原创文章,未经博主允许不得转载。https://mp.csdn.net/postedit/83150266

一、函数指针的实质(还是指针变量)

1、函数指针定义格式:类型名 (*函数名)(函数参数列表);

int (*pfun)(int, int);

2、函数指针的定义、赋值、调用

void func1(void)        //定义一个函数,以方便下面定义函数指针
{
	printf("test for function pointer.\n");
}

void (*pFunc)(void);    //函数指针定义
pFunc = func1; 	        //函数指针赋值
(*pFunc)();             //函数指针调用;用函数指针来调用以调用该函数,注意*pFunc要用()括起来
//pFunc();              //调用的第二种写法,效果和上面一样

3、函数指针作用:函数指针有两个用途:调用函数和做函数的参数.

4、注意:函数指针声明为指针,它与变量指针不同之处是,它不是指向变量,而是指向函数

(1)函数指针的实质还是指针,还是指针变量。本身占4字节(在32位系统中,所有的指针都是4字节)
(2)函数指针、数组指针、普通指针之间并没有本质区别,区别在于指针指向的东西是个什么玩意。
(3)函数的实质是一段代码,这一段代码在内存中是连续分布的(一个函数的大括号括起来的所有语句将来编译出来生成的可执行程序是连续的),所以对于函数来说很关键的就是函数中的第一句代码的地址,这个地址就是所谓的函数地址,在C语言中用函数名这个符号来表示。
(4)结合函数的实质,函数指针其实就是一个普通变量,这个普通变量的类型是函数指针变量类型,它的值就是某个函数的地址(也就是它的函数名这个符号在编译器中对应的地址值)


二、指针函数实质是一个函数

指针函数实质是一个函数。函数都有返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针。

1、指针函数定义格式:类型名 *函数名(函数参数列表);

int *pfun(int, int);

2、指针函数的声明、定义、调用

int * sum(int x); //指针函数的声明;返回类型位一个指针变量 可以通过*p来获取值

int * sum(int x){        //指针函数的定义
    int static sum =0;   //static 修身的变量在数据段;不会被函数栈回收
    int *p;
    int i;
    for(i=1;i<=x;i++){
        sum +=i;
    return p;     //返回类型是某一类型的指针
    }

int *p1;
p1 = fun(a);      //指针函数的调用

3、指针函数作用:可以在是代码更简洁并在一定程度节约内存;如当你需要返回一个数组中的元素时,你就只需返回首元素的地址给调用函数,调用函数即可操作该数组(让函数返回多个值)。

或者是malloc函数动态分配内存,返回该内存的地址给另外一个函数,另一个函数才好操作该内存。当然还有其他的作用,请读者自行在实践中体会。

4、注意:指针函数本质是一个函数,使用方法与普通函数没什么两样。既然是函数,就与变量不一样。变量需要定义、赋值、调用(比如函数指针);而函数需要声明、定义、调用。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/152204.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月22日 上午6:36
下一篇 2022年6月22日 上午6:46


相关推荐

  • python中zipfile的使用_python调用winrar解压

    python中zipfile的使用_python调用winrar解压压缩f=zipfile.ZipFile(file,mode="r",compression=ZIP_STORED,allowZip64=False)创建一个zip文件对象,压缩是需要把mode改为‘w’,这个是源码中的注释OpentheZIPfilewithmoderead"r",write"w"orappend"a",a为追加压缩,不会清空原来的zipf…

    2025年12月12日
    3
  • 带通滤波器电路图大全(三款带通滤波器电路设计原理图详解)「建议收藏」

    带通滤波器电路图大全(三款带通滤波器电路设计原理图详解)「建议收藏」带通滤波器电路图设计(一)传统的带通滤波器设计方法中涉及了很多复杂的理论分析和计算。针对上述缺点,介绍一种使用EDA软件进行带通滤波器的设计方案,详细阐述了使用FilterPro软件进行有源带通滤波器电路的设计步骤,然后给出了在Proteus中对所设计的滤波器进行仿真分析和测试的方法。测试结果表明,使用该方法设计的带通滤波器具有性能稳定。设计难度小等优点,也为滤波器的设计提供了一个新的思路。…

    2022年6月7日
    71
  • Postman用法简介

    Postman用法简介Postman 用法简介 Http 请求模拟工具 在我们平时开发中 特别是需要与接口打交道时 无论是写接口还是用接口 拿到接口后肯定都得提前测试一下 这样的话就非常需要有一个比较给力的 Http 请求模拟工具 现在流行的这种工具也挺多的 像火狐浏览器插件 RESTClient Chrome 浏览器插件 Postman 等等 这里主要介绍一下 Postman nbsp 一 Postman 说明

    2025年10月10日
    8
  • copy.deepcopy()_python切片是深拷贝还是浅拷贝

    copy.deepcopy()_python切片是深拷贝还是浅拷贝copy()与deepcopy()之间的主要区别是python对数据的存储方式。首先直接上结论:—–我们寻常意义的复制就是深复制,即将被复制对象完全再复制一遍作为独立的新个体单独存在。所以改变原有被复制对象不会对已经复制出来的新对象产生影响。—–而浅复制并不会产生一个独立的对象单独存在,他只是将原有的数据块打上一个新标签,所以当其中一个标签被改变的时候,数据块就会发生变化

    2022年10月3日
    3
  • python 图片重命名_python批量重命名文件

    python 图片重命名_python批量重命名文件一个简单的python脚本,用于图片批量重命名,非常简单但是也非常使用!

    2025年9月7日
    5
  • 如何制作bt种子文件「建议收藏」

    首先,先整一个比特彗星然后打开点击文件,点击制作torrent文件在tracker服务器这一项里添加这些服务器http://torrentzilla.org/announcehttp://kinorun.com/announce.phphttp://torrent-team.net/announce.phphttp://bt.3dmgame.com:2710/announcehttp://tracker.ali213.net:8080/announcehttp://bt.ali.

    2022年4月7日
    151

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号