函数指针调用方式

先上实例,再作分析

#include <stdio.h>void myfun(void);int main(void){    void (*pf)(void);    pf = myfun;            /* 也可以这样赋值:pf = &myfun; 其道理同下*/    (*pf)();    pf();    return 0;}void myfun(void){    printf("hello world!\n");}

第一种方法:因为pf指向myfun函数,*pf就是myfun函数,因此表达式(*pf)()与myfun()一样。            从myfun和pf的声明中就能看出myfun和(*pf)是等价的。第二种方法:因为函数名是一个指针,可以互换地使用指针和函数名,因此pf()与myfun()一样。            从pf的赋值语句中就能看出pf和myfun是等价的。

这是c发展过程的历史原因,代表两帮人的不同观点而已!

但,最关键的一点,c标准把这二者作为等价形式全部接受!!!

原文地址:https://www.cnblogs.com/mcy0808/p/12428029.html

时间: 2024-10-19 03:58:48

函数指针调用方式的相关文章

第十六周 【项目3-用函数指针调用函数】

问题及代码: /* *Copyright (c) 2014,烟台大学计算机学院 *ALL right reserved *文件名:用函数指针调用函数 *作者:童宇 *完成日期:2014年12月16日 *版本号v1.0 *问题描述:用函数指针调用函数 *输入描述: *程序输出:用函数指针调用函数 */ #include <iostream> using namespace std; void eat(); void sleep(); void hitdoudou(); void run(void

函数的调用方式:自右向左

#include<stdio.h> #include<math.h>//函数的调用方式:自右向左int main(){ int f(int a, int b); int i = 2, p; p = f(i, ++i); //关键点 printf("%d\n", p); while (1); return 0;} int f(int a, int b){ printf("%d\n", a); printf("%d\n", b

JavaScript中this指向问题(函数的调用方式)

在ES6之前,函数内部的this是由函数的调用方式决定的 函数调用 var age = 18; var p ={ age : 15, say : function(){ console.log(this.age) } } var f1 = p.say; f1(); 这时是函数调用(是由window调用,即f1() = window.f1()). 此时结果为18,因为this指向window. 方法调用 var age = 18; var p ={ age : 15, say : function

用函数指针调用函数

#include <stdio.h> int main(void){     int n = 6;     int square(int num);      int (*fptr)(int);  //声明函数指针     fptr = square;   //初始化函数指针     printf("%d square is %d.\n", n, fptr(n));     return (0);  }  int square(int num){     return (n

根据函数名称---函数指针--调用函数

type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject) ; procedure CallMeByName(Sender: TObject) ; private procedure ExecMethod(OnObject: TObject; MethodName: string) ; end; var Form1: TForm1; type TExec = procedure of o

Callback函数详解(我感觉,回掉函数的本质是函数指针,在业务做循环处理的时候,调用一下通知外部)

2010年的最后一天了,转载一篇自己认为还不错的文章与大家分享.希望对大家有所帮助. 一,回调函数 我们经常在C++设计时通过使用回调函数可以使有些应用(如定时器事件回调处理.用回调函数记录某操作进度等)变得非常方便和符合逻辑,那么它的内在机制如何呢,怎么定义呢?它和其它函数(比如钩子函数)有何不同呢? 使用回调函数实际上就是在调用某个函数(通常是API函数)时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个函数. 而那个函数在需要的时候,利用传递的地址调用回调函数,这时你可以利

js函数的非常规调用方式

我们都知道,函数的声明方式有这两种 function fnA(){alert('msg');}//声明式定义函数 var fnB = function(){alert('msg');}//函数赋值表达式定义函数 通常,我们调用一个方法的方式就是 FunctionName() 但是,如果我们尝试为一个"定义函数"末尾加上(),解析器是无法理解的. function msg(){   alert('message'); }();//解析器是无法理解的 定义函数的调用方式应该是 msg()

C语言之以函数指针结构体方式实现面向对象的思想

在一些嵌入式项目中,我们会遇到一个大模块的处理会涉及到很多模块函数封装,但是由于函数过多往往会不易于模块化和管理,如果引入面向对象中类的思想就会好解决的多,但是C不支持面向对象的实现,所以我们可以利用函数指针的方式来进行模拟类的实现,可参考下例: 此处附上Linux编译器下执行后的打印信息: 这样,我们就实现了模块话的处理,更方便我们进行模块管理,当然,重要是掌握这种思想. 但是,需要注意: 这类方法只支持附带内存管理的MCU可运用这样的思想,比如支持Linux内核的MCU.为何这样说呢,因为此

恼人的函数指针(一)

原文链接:http://www.cnblogs.com/AnnieKim/archive/2011/11/20/2255813.html 这篇是为了加深记忆所写.发现,很多知识若不经过反复的琢磨和动手实践,是很难记得住的. 1)  函数指针的初始化. 函数如下: int CompareString(const string& str1, const string& str2) { return str1.compare(str2); } 函数的初始化有两种方式: 第一种,也是最普遍的方式: